호출된 메소드를 참조할 때 참조하게 되는 두가지 정보
- 메소드의 이름
- 메소드의 매개변수 정보
따라서, 이 둘 중 하나의 형태가 다른 메소드를 정의하는 것이 가능하다.
class MyHome{
void mySimpleHome(int n){...}
void mySimpleHome(int n1, int n2){...}
void mySimpleHome(int n1, int n2, int n3){...}
//메소드 오버로딩
}
String 클래스
String 인스턴스는 Immutable(불변) 인스턴스이다. Immutable는 생성 이후 값의 변경을 허용하지 않음을 의미한다. JVM은 새 인스턴스의 문자열(str2)을 확인하고 이미 같은 문자열 인스턴스(str1)가 있으면 기존 인스턴스의 참조값을 리턴한다. 굳이 같은 문자열이라도 새 인스턴스가 필요하다면 new로 새 인스턴스 생성해주면 된다.
문자열 연산
참조값끼리 덧셈 연산 불가능 하지만, 컴파일러에 의해 concat으로 자동 변환(JVM이 바꿔주는 건 아님)
의미 상 덧셈 연산보다는 'concat'이 맞는 표현이므로 concat을 활용하자!
주의!
concat은 문자열만 가능하다.
String 클래스는 immutable하므로 valueOf, concat 할 때마다 인스턴스가 생성된다. 위의 예제에서는 3번의 valueOf, 3번의 cocat으로 총 6개의 인스턴스가 생성될 것이다. 하지만 위의 예제처럼 몇개의 문자열을 결합하는데 과도한 인스턴스 생성은 비효율적이다. 따라서 컴파일러는 이렇게 변환하지 않는다.
StringBuilder 클래스는 buffer을 가지고 있다. buffer는 저장 공간이라고 생각하자. 인자로 전달되는 데이터들을 자료형에 관계없이 저장만 한다. toString() 했을 때, 문자열 인스턴스를 만들고 그 인스턴스의 참조값을 반환한다. 위의 예제에서는 StringBuilder할 때와 toString할 때 각각 인스턴스를 생성한다. 따라서, 총 2개의 인스턴스가 생성된다.
'Programming > Java' 카테고리의 다른 글
JAVA 13 1차원 배열의 이해와 활용 (0) | 2021.08.04 |
---|---|
JAVA 12 toString 메소드 (0) | 2021.08.04 |
JAVA 10 static이란? (0) | 2021.08.04 |
JAVA 09 정보은닉과 캡슐화 (0) | 2021.08.04 |
JAVA 08 패키지의 이해 (0) | 2021.08.04 |