2020년 10월 23일
업데이트:
Java API(Application Programming Interface)
자바를 사용하여 쉽게 구현할 수 있도록 한 클래스 라이브러리의 집합.
Object.toString()
지정된 객체를 문자열로 변환하여 반환하는 메소드
// Object.toString()
// 상속받은 자식 클래스에서 오버라이딩하여 해당 클래스의 멤버 변수 정보를 출력하는 용도로 사용할 수 있는 메소드
@Override
public String toString() {
return "Book [title=" + title + ", author=" + author + ", price=" + price + "]";
}
Book book1 = new Book("응용SW기초기술활용", "교육부", 5000);
Book book2 = new Book("응용SW기초기술활용", "교육부", 5000);
Book book3 = new Book("응용SW기초기술활용", "노동부", 5000);
// print 관련 구문에서 참조 변수명만 입력할 경우
// toString()이 컴파일 단계에서 추가된다.
System.out.println(book1);
System.out.println(book1.toString());
/* 출력
Book [title=응용SW기초기술활용, author=교육부, price=5000]
Book [title=응용SW기초기술활용, author=교육부, price=5000]
*/
Object.hashCode() 오버라이딩
hashCode() 오버라이딩 목적은 두 객체의 형태가 일치하는지를 비교하는 목적으로 사용한다(동일비교).
@Override
public int hashCode() {
int result = 1;
final int prime = 31; // 17 또는 31
result = result * prime + ((title == null) ? 0 : title.hashCode());
result = result * prime + ((author == null) ? 0 : author.hashCode());
result = result * prime * price;
return result;
}
// APIService.java
System.out.println("book1의 hashCode() : " + book1.hashCode());
System.out.println("book2의 hashCode() : " + book2.hashCode());
System.out.println("book3의 hashCode() : " + book3.hashCode());
////오버라이딩 전 hashCode() : 366712642
//오버라이딩 후 hashCode() : 2034870569
String Literal(스트링 리터럴)
String str1 = "abc";
String str2 = "abc";
String str3 = new String("abc");
// str1, 2, 3 비교
// '==' 연산자를 사용하면 참조하고 있는 주소값을 비교함
System.out.println("str1 == str2 : " + (str1 == str2)); // true -> str1과 str2이 같은 주소를 참조하고있음
System.out.println("str1 == str3 : " + (str1 == str3));
// System.identityHashCode()
// -> 실제 객체의 시작 주소를 이용하여 특정 값을 만들어내는 메소드
System.out.println(System.identityHashCode(str1));
System.out.println(System.identityHashCode(str2));
System.out.println(System.identityHashCode(str3));
String 객체의 불변성(Immutable)
String 데이터는 한 번 생성되면 변하지 않는 성질을 가지고 있다.
String str1 = "abc";
// str1 생성 후 주소값
System.out.println("str1 : " + str1);
System.out.println("System.identityHashCode(str1) : " + System.identityHashCode(str1));
/* 출력
str1 : abc
System.identityHashCode(str1) : 366712642
*/
str1+= "def";
System.out.println("str1 : " + str1);
System.out.println("System.identityHashCode(str1) : " + System.identityHashCode(str1));
/* 출력
str1 : abcdef
System.identityHashCode(str1) : 1829164700
*/
// String 데이터는 한 번 생성되면 변하지 않으므로 수정이 필요할 경우 새로운 String 데이터가 생성된다.
// -> 잦은 String 데이터 수정이 발생하는 경우 메모리 낭비가 심해진다.
// StringBuffer(가변성)
System.out.println();
System.out.println("Stringbuffer 활용");
StringBuffer sb = new StringBuffer(); // 초기 용량 16 할당
System.out.println("sb 용량 : " + sb.capacity());
System.out.println("추가 전 주소값 : " + System.identityHashCode(sb));
// StringBuffer에 데이터 추가
sb.append("1234567890123456");
System.out.println("sb 용량 : " + sb.capacity());
System.out.println("추가 후 주소값 : " + System.identityHashCode(sb));
sb.append("^");
System.out.println("sb 용량 : " + sb.capacity());
System.out.println("추가 후 주소값 : " + System.identityHashCode(sb));
System.out.println("저장 결과 출력 : " + sb.toString());
String lastStr = sb.toString();
String.split(구분자)
문자열을 지정된 구분자
를 기준으로하여 분리 후 String[] 배열로 반환한다.
String str = "사과, 바나나, 딸기, 파인애플, 오렌지, 멜론, 자두";
String[] arr = str.split(", ");
for(String s : arr) {
// arr 배열 요소를 순서대로 하나씩 꺼내서 s 변수에 저장
System.out.println(s);
}
// String.join("구분자", String 배열)
// 배열 요소를 하나의 문자열로 만들어주는 메소드
// 요소 사이를 구분할 구분자를 작성해야 함.
String str2 = String.join("-", arr);
System.out.println(str2);
StringTokenizer
생성될 때 전달받은 문자열을 특정 구분자에 맞게 구분하여 토큰화시킨다.
String str1 = "아 배고프다. 오늘 점심 뭐먹을까요?";
StringTokenizer st1 = new StringTokenizer(str1);
while(st1.hasMoreTokens()) {
// hasMoreTokens() : 남아있는 토큰이 있으면 true
System.out.println(st1.nextToken());
// nextToken() : 다음 토큰을 얻어옴
}
String str2 = "어제. 내드린, 문제, 어렵죠? ㅋㅋㅋ/ㅈㅅ";
StringTokenizer st2 = new StringTokenizer(str2, ",");
// str2를 ,로 구분
while(st2.hasMoreTokens()) {
System.out.println(st2.nextToken());
}
Wrapper Class
기본 자료형을 객체로 사용할 수 있도록 포장하는 클래스
// 왜 사용하는가??
// 1) 기본 자료형으로는 수행할 수 없는 기능을 사용하기 위해서
// - 기본 자료형의 데이터 최대/최소 값
// - String 데이터 <-> 기본 자료형으로 변환
// ex) "1204" + 1 = "12041"
// Integer.parseInt("1204") + 1 = 1205
// 2) 어쩔 수 없이 기본자료형을 사용할 수 없는 경우
// 기본 자료형 -> 객체로 변환하기 위해서 사용
// ex) Object obj = 1; // 원래는 안 되지만 jdk1.5부터 가능
// -> Auto Boxing / UnBoxing
// 기본 자료형별 Wrapper Class
/* boolean -> Boolean
* byte -> Byte
* short -> Short
* int -> Integer
* long -> Long
* float -> Float
* double -> Double
* char -> Cha,/racter
*/
System.out.println(Integer.MAX_VALUE); //int 타입의 최대값
System.out.println(Integer.MIN_VALUE);// int 타입의 최소값
String str = "123";
int iNum = Integer.parseInt(str) + 100;
double dNume = Double.parseDouble("3.14");
// Integer.parseInt(문자열) : 숫자로만 이루어진 문자열을 -> int형으로 변환
// parsing(파싱) : 데이터의 형태를 변경
System.out.println("iNum : " + iNum);
// Boxing : 기본 자료형을 Wrapper Class 객체로 변경
int num1 = 10;
Integer it1 = new Integer(num1);
System.out.println("it1 : " + it1);
System.out.println(it1.MAX_VALUE);
// Unboxing : Wrapper Class -> 기본 자료형
int i1 = it1.intValue();
int i2 = (int)it1;
// Auto Boxing / UnBoxing
Integer it3 = 100;
// 100이라는 숫자가 컴파일 시 자동으로 Integer 객체로 포장됨
// --> Auto Boxing
Object it4 = 100;
int i3 = it1;
//int = Integer ---> int
// Auto Unboxing
댓글남기기