라이브러리 - 기초사용법
Java API Programming
API?
'Application Programming Interface'의 줄임말
미리 만들어진 클래스, 인터페이스, 패키지들을 의미
누군가가 미리 개발해둔 내용들이다.
Googlo에 java 8 api 입력후 접속
API에서 배우는것
1. API 문서를 보는 방법
2. API 문서의 내용을 코드에 적용시키는 방법
3. API 문서에 나오는 특이한 유형의 코드들
4. 주요 API 도구를 이용한 프로그래밍
- java.lang 패키지
- java.util 패키지
- java.text 패키지
- java.io 패키지
- java.net 패키지
5. 확장된 자바에서 배우는 패키지
- java.sql 패키지
- javax.sql 패키지
API 문서 보는 방법
API 문서는 총 3가지 영역으로 나누어져 있다(버전에 따라 다름)
1. 좌상단 영역 : 제공되는 패키지 목록
2. 좌하단 영역 : 제공되는 클래스 목록 표시
3. 우측 영역(중앙 영역) : 해당 클래스 또는 패키지에 대한 상세 설명
-> API 문서는 사진처럼 봐야 하므로 정독하지 않는다
라이브러리 - Object
java.lang.Object
1. 생성자
2. 멤버 변수 / static 변수
3. 멤버 메소드 / static 메소드
Object 는 무슨 역할을 하는 클래스인가?
자고로 클래스라면 무조건 Object를 상속받는다(인터페이스 제외)
클래스라면 반드시 가지고 있어야 할 "공통" 기능에 대해서 정의한다.
내가 만든 클래스와 Object의 관계
내가 만든 클래스도 Object의 자식 클래스
모든 Object의 기능을 가지며, 재정의 가능
Object가 모든 계층의 최상위라는 것을 증명
다형성 이용
다형성의 원리에 의하면 상위 클래스는 하위 클래스의 데이터를 보관할 수 있다(업 캐스팅)
따라서 Object가 진짜 최상위 클래스라면 자바의 모든 데이터는 Object로 저장이 가능해야 한다
package api.lang.object;
import java.util.Random;
import java.util.Scanner;
public class Test04 {
public static void main(String[] args) {
Object a = 10;
Object b = 3.14;
Object c = "Hello";
Object d = new Random();
Object sc = new Scanner(System.in);
Object arr = new int[5];
Object s = new Student();
}
}
라이브러리 - Integer
Wrapper 클래스 : 기본 자료형을 객체화한 클래스(하이브리드 클래스)
int는 원시형이고, Integer는 참조형이며 서로 호환이 가능하다
package api.lang.wrapper;
public class Test01 {
public static void main(String[] args) {
// 1. Integer에는 두 가지 생성방법이 있는데, 각각의 방법을 이용하여 `a`, `b`라는 이름으로 100을 설정한 객체를 생성
Integer a = new Integer(100);
Integer b = new Integer("100");
// 2. `a`와 `b`의 해시코드 및 요약정보를 출력
System.out.println(a.hashCode());
System.out.println(b.hashCode());
System.out.println(a.toString());
System.out.println(b.toString());
// 3. int의 최소값, 최대값을 가진 변수를 찾아 화면에 출력
System.out.println(Integer.BYTES);
System.out.println(Integer.SIZE);
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
// 4. 100을 16진수, 8진수, 2진수로 각각 변환하여 출력
System.out.println(Integer.toHexString(100));
System.out.println(Integer.toOctalString(100));
System.out.println(Integer.toBinaryString(100));
}
}
Q : int가 있는데 Integer는 왜 필요한가? 뭐가 다른가?
A : int가 필요한 상황도 있고, Integer가 필요한 상황도 있다
package api.lang.wrapper;
public class Test02 {
public static void main(String[] args) {
// int가 필요한 상황(ex : 10 + 20을 계산)
int a1 = 10;
int a2 = 20;
int a3 = a1 + a2;
System.out.println(a3);
Integer b1 = new Integer(10);
Integer b2 = new Integer(20);
Integer b3 = Integer.sum(b1, b2);
System.out.println(b3.toString());
// Integer가 필요한 상황(ex : 100을 2진수로 변환)
int c = 100;
String s = "";
for (int i = c; i > 0; i /= 2) {
s = i % 2 + s;
}
System.out.println(s);
System.out.println(Integer.toBinaryString(c));
}
}
Q : int와 Integer는 서로 변환이 가능합니까?
A : 반드시 구분해야하는 경우가 아니라면 구분하지 않고 섞어써도 된다
package api.lang.wrapper;
public class Test03 {
public static void main(String[] args) {
int a = 10;
Integer b = 10; // int ---> Integer (원시형 -> 참조형) : auto-boxing
int c = new Integer(10); // Integer ---> int (참조형 -> 원시형) : auto-unboxing
Integer a1 = 10;
Integer a2 = 20;
Integer a3 = a1 + a2;
System.out.println(a3);
}
}
int와 Integer의 결정적인 차이 : null
null은 "참조형" 데이터에서 "객체"가 없음을 의미하는 단어
int는 "원시형"이므로 null을 보관할 수 없다
혹시라도 null이라는 데이터가 발생할 수 있는 상황이라면 int는 절대로 사용하면 안된다
package api.lang.wrapper;
public class Test04 {
public static void main(String[] args) {
// int a= null; // 안됨
Integer a = null;
System.out.println("a = " + a);
int b = a;
System.out.println("b = " + b);
}
}
라이브러리 - 객체 비교
원시형과 참조형의 비교 차이
원시형은 값만 보관하고 있기 때문에 비교연산은 값을 비교하게 되어 있다
객체에서 일반적으로 "같음"은 동일한 객체인지를 말하는 것이다.(동일비교)
상황에 따라서는 객체가 아니라 속성이 같으면 같다고 보는 경우도 있다
(ex) 서로 다른 휴대폰이 "같은 기종"과 "같은 색상"인 경우 나머지 정보가 달라도 같다고 본다(동등비교)
비교 연산은 "동일"함을 비교하도록 되어 있으므로 "동등"함을 비교하는 명령이 따로 필요
equals 메소드를 이용하여 비교한다.
package api.lang.wrapper;
public class Test05 {
public static void main(String[] args) {
int a = 10;
int b = 10;
System.out.println(a == b);// 같은 값인가요?
Integer c = new Integer(10);
Integer d = new Integer(10);
Integer e = c;
System.out.println(c == d);// 같은 객체인가요?
System.out.println(c == e);
System.out.println(c.equals(d));// 객체 구성요사가 같나요? (동등한가요?)
}
}
결론 : 앞으로 객체는 특별한 사유가 없다면 equals() 메소드로 비교한다
- 값 비교
package api.lang.wrapper;
public class Test06 {
public static void main(String[] args) {
Integer a = 10; // int --> Integer : auto-boxing
Integer b = 10; // int --> Integer : auto-boxing
Integer c = new Integer(10);
Integer d = new Integer(10);
System.out.println(a == b); // true
System.out.println(b == c); // false
System.out.println(c == d); // false
System.out.println(d == a);// false
System.out.println(a.equals(b)); // true
System.out.println(b.equals(c)); // true
System.out.println(c.equals(d)); // true
System.out.println(d.equals(a)); // true
}
}
라이브러리 - 문자열
Q. `String` 에 대한 API 문서를 보시고 다음 작업을 수행해보세요
1. String클래스의 생성자를 이용하여 "Hello World"라는 글자가 담긴 객체를 a라는 이름으로 생성해보세요
2. String클래스의 생성자를 이용하여 "hello world"라는 글자가 담긴 객체를 b라는 이름으로 생성해보세요
3. a와 b의 글자수를 구하여 출력해보세요
4. a의 3번째 글자를 추출하여 출력해보세요
5. a와 b가 "동등"한지 비교해보세요
6. a와 b가 "대소문자를 무시하고 동등"한지 비교해보세요
package api.lang.string;
public class Test01 {
public static void main(String[] args) {
// 1. String클래스의 생성자를 이용하여 "Hello World"라는 글자가 담긴 객체를 a라는 이름으로 생성해보세요
// 2. String클래스의 생성자를 이용하여 "hello world"라는 글자가 담긴 객체를 b라는 이름으로 생성해보세요
// String a = "Hello World";
// String b = "hello world";
String a = new String("Hello World");
String b = new String("hello world");
// 3. a와 b의 글자수를 구하여 출력해보세요
System.out.println("a의 글자 수 = " + a.length());
System.out.println("b의 글자 수 = " + b.length());
// 4. a의 3번째 글자를 추출하여 출력해보세요
// = 문자열은 char의 모음이며, 위치는 +0부터 시작
System.out.println(a.charAt(2));
// 5. a와 b가 "동등"한지 비교하세요
System.out.println(a == b);// 백날 비교해도 false(절대로 true가 나올 수 없음) - 동일비교
System.out.println(a.equals(b));// 글자값 일치 검사(대소문자를 구분) - 동등비교
// 6. a와 b가 "대소문자를 무시하고 동등"한지 비교해보세요
System.out.println(a.equalsIgnoreCase(b));
}
}
- 정답a의 글자 수 = 11
b의 글자 수 = 11
l
false
false
true
Q. 사용자에게 아이디와 비밀번호를 입력받아서 로그인을 수행하는 프로그램을 구현
- 만약 사용자가 입력한 아이디가 `admin`이고 비밀번호가 `master`라면 `관리자 로그인되었습니다` 출력
- 아니라면 `정보가 일치하지 않습니다` 출력
- 아이디는 대소문자를 구분하지 않고, 비밀번호는 대소문자를 구분하도록 처리하시기 바랍니다.
package api.lang.string;
import java.util.Scanner;
public class Test02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("아이디 입력");
String id = sc.next();
System.out.println("비밀번호 입력");
String password = sc.next();
sc.close();
// boolean isLogin = 아이디가 admin이고 비밀번호가 master입니까?;
// boolean isLogin = id == "admin" && password == "master";
// boolean isLogin = id.equals("admin") && password.equals("master");
boolean isLogin = id.equalsIgnoreCase("admin") && password.equals("master");
// System.out.println("isLogin = " + isLogin);
if (isLogin) {
System.out.println("관리자님 로그인하셨습니다");
} else {
System.out.println("정보가 일치하지 않습니다");
}
}
}
- 정답
아이디 입력
ADMIN
비밀번호 입력
master
관리자님 로그인하셨습니다
문자열의 부분 비교
문자열이 특정값으로 시작합니까? startsWith()
문자열이 특정 값으로 끝납니까? endsWith()
문자열에 특정 값이 포함되어 있습니까? contains()
문자열에 특정 값이 어디에 있습니까? indexOf() - 왼쪽부터, lastIndexOf() - 오른쪽부터
package api.lang.string;
public class Test03 {
public static void main(String[] args) {
String homePage = "http://www.naver.com";
System.out.println(homePage.startsWith("http"));// http로 시작하나요?
System.out.println(homePage.endsWith(".com"));// .com으로 끝나나요?
System.out.println(homePage.contains("naver"));// naver라는 글자가 포함되어 있나요?
System.out.println(homePage.indexOf("naver"));// naver라는 글자가 어디에 있나요?(좌측부터)
System.out.println(homePage.lastIndexOf("naver"));// naver라는 글자가 어디에 있나요?(우측부터)
}
}
- 정답
true
true
true
11
11
Q. 사용자에게 이메일을 입력받아서 올바른 이메일인지 검사하는 프로그램을 구현
- 검사 조건
1. 이메일은 최소 5글자 이상 최대 50글자 이하로 설정해야 합니다.
2. 이메일에는 반드시 @가 포함되어야 하며 처음과 마지막에 포함될 수 없습니다
3. 마지막은 반드시 `.com`으로 끝나야 합니다.
4. 이메일에 `admin`이라는 글자는 사용할 수 없습니다.
위의 조건을 모두 만족하는 경우 `이메일 설정 완료` 라는 메세지를,
조건에 맞지 않으면 `이메일을 다시 입력하세요`라는 메세지를 출력
package api.lang.string;
import java.util.Scanner;
public class Test04 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("사용할 이메일 입력");
String email = sc.next();
sc.close();
// one 이메일은 최소 5글자 이상 최대 50글자 이하로 설정해야 합니다.
// two 이메일에는 반드시 @가 포함되어야 하며 처음과 마지막에 포함될 수 없습니다
// three 마지막은 반드시 `.com`으로 끝나야 합니다.
// four 이메일에 `admin`이라는 글자는 사용할 수 없습니다.
boolean one = email.length() >= 5 && email.length() <= 50;
// boolean two = email.contains("@") && !email.startsWith("@") && !email.endsWith("@");
// boolean two = email.contains("@") && email.charAt(0) != '@' && email.charAt(email.length() - 1) != '@';
boolean two = email.indexOf("@") > 0 && email.indexOf("@") < email.length() - 1;
boolean three = email.endsWith(".com");
boolean four = !email.contains("admin");
boolean isPass = one && two && three && four;
// System.out.println("one = " + one);
// System.out.println("two = " + two);
// System.out.println("three = " + three);
// System.out.println("four = " + four);
// System.out.println("isPass = " + isPass);
if (isPass) {
System.out.println("이메일 설정이 완료되었습니다");
} else {
System.out.println("잘못된 이메일을 입력하였습니다");
}
}
}
- 정답
사용할 이메일 입력
sadasd@asd.com
이메일 설정이 완료되었습니다
Q. 공포의 쿵쿵따 게임 만들기
java
String[] record = new String[10];
record[0] = "바나나";
위의 데이터가 주어져 있을 때, record[0]을 제시어로 하여 쿵쿵따 게임을 배열안의 데이터가 가득 찰 때까지 진행
게임 규칙
- 사용자는 무조건 3글자의 단어를 입력해야 합니다.
- 직전에 입력한 단어(없으면 제시어)와 연결되는 글자로 시작해야 합니다.
- 배열에 단어가 가득 찬다면(round 9) 게임이 클리어되며 `Game Finish~` 메세지를 출력
- 배열에 단어가 가득 차기 전에 잘못된 입력으로 조건이 맞지 않으면 `Game over` 메세지를 출력
package api.lang.string;
import java.util.Scanner;
public class Test05 {
public static void main(String[] args) {
String[] record = new String[10];
record[0] = "바나나";
// +1 위치부터 마지막까지 입력 -> 검사 -> 출력
int round = 0;
Scanner sc = new Scanner(System.in);
for (int i = 1; i < record.length; i++) {
System.out.println("round " + i);
System.out.println("제시어 : " + record[i - 1]);
System.out.println("입력");
record[i] = sc.next();
boolean isLengthOk = record[i].length() == 3;
boolean isConnect = record[i - 1].charAt(record[i - 1].length() - 1) == record[i].charAt(0);
boolean isCorrect = isLengthOk && isConnect;
if (isCorrect) {
round++;
} else {
break;
}
}
sc.close();
System.out.println("진행 라운드 : " + round);
if (round == record.length - 1) {// 마지막까지 진행했다면
System.out.println("Game Finish~");
} else {
System.out.println("Game Over..");
}
}
}
- 정답
round 1
제시어 : 바나나
입력
나훈아
round 2
제시어 : 나훈아
입력
아파트
round 3
제시어 : 아파트
입력
트위스트
진행 라운드 : 2
Game Over..
문자열 편집
문자열을 우리가 원하는대로 바꾸는 작업
package api.lang.string;
public class Test06 {
public static void main(String[] args) {
// 대소문자 변경
String text = "Hello World";
System.out.println(text);
System.out.println(text.toUpperCase());
System.out.println(text.toLowerCase());
// 불필요한 공백 제거
// = 공백이 아닌 첫글자, 공백이 아닌 마지막 글자를 찾아 그 외 공백을 모두 삭제
String url = " http://www.naver.com ";
System.out.println(url.length());
System.out.println(url);
System.out.println(url.trim());
System.out.println(url.trim().length());
// 문자열 잘라내기 - substring()
String korean = "가나다라마바사아자차카타파하";
System.out.println(korean);
System.out.println(korean.substring(4, 9));// 4부터 9지점 사이를 잘라내라
System.out.println(korean.substring(4));// 4부터 잘라내라(~끝까지)
// 문자열 치환 - replace()
String msg = "나는 자바가 싫어요";
System.out.println(msg);
System.out.println(msg.replace("싫어", "좋아"));
System.out.println(msg);
System.out.println(msg.replace("싫어", "좋아").replace("자바", "피자"));
}
}
- 정답
Hello World
HELLO WORLD
hello world
76
http://www.naver.com
http://www.naver.com
20
가나다라마바사아자차카타파하
마바사아자
마바사아자차카타파하
나는 자바가 싫어요
나는 자바가 좋아요
나는 자바가 싫어요
나는 피자가 좋아요
Q. 과제
욕설 필터링 프로그램
사용자가 입력한 채팅에서 다음과 같은 욕설이 발견될 경우 욕설을 `***`로 필터링 하세요
- 주옥
- 신발끈
- 개나리
- 십장생
- 수박씨
- 시베리아
- 쌍화차
- 가습기
- 개불
- 게새우
예 :
이런 신발끈을 묶으면서 쌍화차를 마시는데 가습기가 고장나고 난리야
이런 ***을 묶으면서 ***를 마시는데 ***가 고장나고 난리야
package api.lang.string;
import java.util.Scanner;
public class Test07 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] no = new String[] { "주옥", "신발끈", "개나리", "십장생", "수박씨", "시베리아", "쌍화차", "가습기", "개불", "게새우" };
System.out.println("채팅을 입력하세요");
String chat = sc.nextLine();
sc.close();
for (int i = 0; i < no.length; i++) {
chat = chat.replace(no[i], "***");
}
System.out.println("사용자 : " + chat);
}
}
'Java 웹 개발' 카테고리의 다른 글
21.09.08 - 웹 개발 입문 21일차 (0) | 2021.09.08 |
---|---|
21.09.07 - 웹 개발 입문 20일차 (0) | 2021.09.07 |
21.09.03 - 웹 개발 입문 18일차 (0) | 2021.09.03 |
21.09.02 - 웹 개발 입문 17일차 (0) | 2021.09.02 |
21.09.01 - 웹 개발 입문 16일차 (0) | 2021.09.01 |