스터디/혼공학습단

[혼공학습단] 자바 3주차 과제

Jop 2022. 7. 24. 15:27
반응형

📄3주차 기본미션

진도: Chapter10 ~ 11

기본미션: 혼공 용어 노트에 용어 추가 등 노트활용하고 공유하기

선택미션: 512페이지 8번 풀고 풀이과정 설명하기

 

📄 기본미션 : 혼공 용어 노트에 용어 추가 등 노트 활용하고 공유하기

..사실 ebook을 읽어있는 저에게는 혼공용어노트가 있는 것을 이번 3주차 과제를 하던 중 알게되었습니다...그래서 Chapter10부터 시작을 했는데, 여름방학 기간동안 따로 혼공용어 노트를 활용할 수 있도록 노력해보겠습니다.😂

 

 

📄 선택미션 : 512페이지 8번 풀고 풀이과정 설명

No8. 박싱된 Integer 객체를 == 연산자로 비교해봤습니다. 100을 박싱한 Integer객체는 true가 나오는데 , 300을 박싱한 Integer객체는 false가 나오는 이유를 설명해보세요.

public class IntegerCompareExample{
	
    public static void main(String[] args){
        Integer obj1 = 100;
        Integer obj2 = 100;
        Integer obj3 = 300;
        Integer obj4 = 300;

        System.out.println(obj1 == obj2);
        System.out.println(obj3 == obj4);
    }
}

이유 : 값의 범위가 -128 ~ 127이면 ==은 값을 비교하고 그 이외에는 번지를 비교하기 때문입니다.

 

자바 언어의 명세를 보면 다음과 같은 규칙이 있습니다.

타입 값의 범위
boolean true, false
char \u0000 ~ \u007f
byte, short, int -128 ~ 127

박싱된 값이 다음 표에 나와 있는 범위의 값이라면 ==와 != 연산자로 내부의 값을 바로 비교할 수 있지만, 그 이외의 경우에는 언박싱한 값을

얻어비교를 해야 합니다.

 

따라서 포장 객체에 정확이 어떤 값이 저장될 지 모르는 상황이라면 == 와 != 연산자는 사용하지 않는 것이 좋습니다. 직접 내부 값을 언박싱해서 비교하거나, equals()메소드로 내부 값을 비교하는 것이 좋습니다. 포장 클래스의 equals()메소드는 내부의 값을 비교하더록 재정의 되어있습니다.

 

이번엔 별도로 궁금했던 내용들을 직접 실행해보고 결과 값을 확인해보았습니다.

https://github.com/Cyeji/hongong-java

 

GitHub - Cyeji/hongong-java: # 혼자공부하는 자바 손코딩

# 혼자공부하는 자바 손코딩. Contribute to Cyeji/hongong-java development by creating an account on GitHub.

github.com

 

저는... 이번 챕터에서 제일 흥미로웠던 부분이 별도의 메소드를 생성하지않고, java.lang패키지에 담고 있는 클래스 메소드를 재정의해서 

사용한 점이 제일 흥미로웠습니다.

public class Member{
	public String id;
    
    public Member(String id){
    	this.id = id;
    }
    
    // equals 메소드를 오버라이딩해서 Member객체 값 비교하는 방식으로 변경
    @Override
    public boolean equals(Object obj){
    	if(obj instanceod Member){
        	Member member = (Member) obj;
            if(id.equals(member.id)){
            	return true;
            }
        }
        return false;
   }
}
반응형