05.23 TIL

JuHyung Yoon·2023년 5월 23일
0

JAVA 기초

목록 보기
11/11

롬복

어노테이션으로 자주 작성되는 코드를 만들어 줍니다.주로 데이터를 저장하는 클래스를 생성합니다.
ide가 컴퓨터에 없다고 나오면 lombok.jar.파일을 원하는 ide가있는 폴더에 설치해주면된다.
path 설정된 폴더(경로)의 명령어들은 어느 위치의 폴더에서나 실행할 수 있음

예외처리

checked Exception: 예외처리를 팔시주거(강제적)으로 패야합니다.
Unchecked Exception : java.lang.RuntimeException
NullpointerException

Exception 처리
try ~ catch
throws 예외A,예외B...:예외 처리를 위임

동일성과 동등성의 결과값이 다른 이유는 객체의 hashCode() 메소드와 equals() 메소드의 재정의 여부와 관련이 있습니다.

동일성(Distinguishability):
동일성은 두 객체가 메모리 상에서 정확히 같은 객체인지를 판단하는 것입니다. 즉, 동일한 객체를 참조하고 있는지를 비교합니다. 이를 확인하기 위해 객체의 참조 값을 비교하면 됩니다. (== 연산자를 사용)

//EqualsAndHashCode 재정의 없는 클래스
			Customer c1 = new Customer("jenny", "이제니", 22);
			Customer c2 = new Customer("jenny", "이제니", 22);
			System.out.println("Customer 동일성 = " +(c1.hashCode()==c2.hashCode()));	//false
			System.out.println("Customer 동등성 = " + c1.equals(c2));	//false
				
		//EqualsAndHashCode 재정의 한 클래스
			CustomerENH cs1 = new CustomerENH("jenny", "이제니", 22);
			CustomerENH cs2 = new CustomerENH("jenny", "이제니", 22);
			System.out.println("CustomerENH 동일성 = " +(cs1.hashCode()==cs2.hashCode()));	//true
			System.out.println("CustomerENH 동등성 = " + cs1.equals(cs2));	//true
			System.out.println(cs1==cs2);
            System.out.println(cs1.toString()==cs2.toString());
			//toString으로 새로 만들어진 문자열 객체의 비교입니다.

동등성(Equivalence):
동등성은 두 객체가 내용적으로 동일한지를 판단하는 것입니다. 즉, 논리적으로 같은지를 비교합니다. 이를 확인하기 위해 객체의 내용을 기준으로 hashCode() 메소드와 equals() 메소드를 사용합니다.

첫 번째 경우에서는 Customer 클래스에는 hashCode()와 equals() 메소드의 재정의가 없기 때문에 Object 클래스에서 상속받은 기본 구현을 사용합니다. Object 클래스의 hashCode() 메소드는 객체의 참조 값에 기반하여 해시 코드를 생성하므로, 동일한 객체라도 각각의 인스턴스마다 다른 해시 코드를 생성합니다. 따라서 c1.hashCode()와 c2.hashCode()는 다른 값을 반환하게 되고, equals() 메소드도 내용 비교를 수행하지 않기 때문에 false를 반환합니다.

두 번째 경우에서는 CustomerENH 클래스에는 hashCode()와 equals() 메소드를 재정의하여 객체의 필드 값에 기반하여 동등성을 판단하도록 구현했습니다. hashCode() 메소드는 동일한 필드 값을 가진 객체에 대해 동일한 해시 코드를 생성하므로 cs1.hashCode()와 cs2.hashCode()는 같은 값을 반환합니다. 또한, equals() 메소드는 필드 값의 동등성을 판단하므로 cs1.equals(cs2)는 true를 반환합니다.

따라서, 첫 번째 경우에서는 동일성과 동등성이 모두 false이지만, 두 번째 경우에서는 동일성은 false이지만 동등성은 true입니다.

profile
ㅋㅎ딩초보

0개의 댓글