Part2 - 객체지향 프로그래밍(3)
String, Wrapper 클래스
String 클래스
- 선언
String str1 = new String("abc");
: 인스턴스로 생성됨
String str2 = "abc";
: 상수풀에 있는 문자열을 가리킴
//psvm
String str1 = new String("abc");
String str2 = new String("abc");
System.out.println(str1 == str2); //false
String str3 = "abc";
String str4 = "abc";
System.out.println(str1 == str2); //true
생성자로 생성한 String객체는 각각의 다른 힙메모리 주소를 점유하고 있기 때문에 false 를 반환한다.
하지만 바로 문자열을 대입한 String 객체는 상수풀에 있는 같은 위치를 가리키기 때문에 true를 반환한다.
equals로 비교하면 둘다 true반환한다.
- String은 Immutable
한번 선언되거나 생성된 문자열을 변경할 수 없음
String 클래스의 concat()메소드 혹은 “+” 를 이용하여 String을 연결하는 경우 새 로 생성된 문자열이다.
StringBuilder, StringBuffer
- 가변적인 char[]배열을 멤버변수라 가지고 있는 클래스 (mutable)
- 문자열을 변경하거나 연결하는 경우 사용하면 편리
- StringBuffer는 멀티 쓰레드프로그래밍에서 동기화가 보장됨
단일 쓰레드 프로그래밍에서는 StringBuilder를 사용하는 것이 더 좋다. - toString()메소드로 String반환
//psvm
String java = new String("java");
String android = new String("android");
StringBuilder buffer = new StringBuilder(java);
buffer.append(android);
java = buffer.toString();
buffer의 메모리 주소값은 계속 동일하다. mutable이기 때문이다.
Wrapper 클래스
기본형 | Wrapper클래스 |
---|---|
boolean | Boolean |
byte | Byte |
char | Character |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
- 기본형을 클래스로 감싸서 사용할 수 있도록 함.
- 자바 초기에는 기본형과 wrapper클래스와 호환이 되지 않았음(auto-un|boxing)
제네릭 프로그래밍
- 변수나 매개변수를 여러 자료형으로 변환될 수 있도록 하는 프로그래밍 방식
- 실제 사용되는 참조 자료형으로의 변환은 컴파일러가 검증
- 제네릭 매개변수의 유효범위는(Scope) 지역변수와 같다.
public class GenericPrinter<T extends Material> { //제네릭 클래스
private T material; //제네릭 타입 변수
public void setMaterial(T material) {
this.material = material;
}
public T getMaterial(){ //제네릭 메소드
return material;
}
}