2020년 10월 23일

업데이트:


Java API(Application Programming Interface)

자바를 사용하여 쉽게 구현할 수 있도록 한 클래스 라이브러리의 집합.

Java API 8 사이트

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

태그:

카테고리:

업데이트:

댓글남기기