java 3

얕은 복사(Shallow copy) vs 깊은 복사(Deep copy)

얕은 복사는 ‘=’ 연산자로 수행하는데 주소를 복사하기 때문에 한쪽에서 수정이 발생하면 다른 쪽도 동일하게 수정된다 즉, 복사된 것과 복사본이 동시에 변경된다. 깊은 복사는 얕은 복사를 해결하기 위한 방법으로 주소값을 참조하는게 아닌 새로운 메모리 공간에 값을 복사된다 즉, 복사된 것과 복사본이 서로 다른 메모리 공간을 차지하고 있다 clone() 메서드를 써도 되고, 배열의 경우 for문을 돌려주면 된다.

equals() 메서드와 == 연산자의 차이

equals()는 메서드이고 == 은 비교 연산자이다 equals()는 값을 비교하지만 == 연산자는 주소값을 비교한다 추가로, 리터럴(“”)로 초기화 하는 경우 constant pool에 리터럴 String 인스턴스를 생성해주기 때문에(주소값을 가짐) 한번 생성한 리터럴 인스턴스로 공유함 eqauls()와 == 의 결과 비교 String a = "aaa"; String b = a; String b2 = "aaa"; String c = new String("aaa"); System.out.println(a==b ? "true" : "false"); // true System.out.println(a==b2 ? "true" : "false"); // true System.out.println(a.equal..

공변 반환타입 (covariant return type)

원래 자바에서 오버라이딩의 성립 조건은 리턴타입, 매개변수, 메서드 이름 등 그대로 사용해야 하는데 공변 반환타입 덕분에 리턴 타입을 바꿔 쓸 수 있게 됐다. JDK1.5부터 오버라이딩할 때 부모 메소드의 반환타입을 자식 클래스의 타입으로 변경 가능하다. Object 클래스의 Clone()을 오버라이딩 public Point clone() { //반환타입을 Object에서 Point 변경 Object obj = null; try { obj = super.eat(); } catch(Exception e) {} return (Point)obj; //Point 타입으로 형변환 공변 반환타입을 사용하면 조상의 타입이 아닌, 실제로 반환되는 자손 객체의 타입으로 반환할 수 있어 번거로운 형변환이 줄었다. Poin..