오늘은 알고리즘 학습주차가 마무리되는 날이면서 동시에 알고리즘 테스트를 진행한다.
문제는 총3문제가 출제되었다.
그리디 알고리즘을 활용한 문제가 2문제, 2D Array를 사용한 문제(지뢰찾기) 한문제가 출제 되었다.
그리디 문제는 해결하였으나 지뢰찾기 문제는 해결하지 못했다.
추후 학습이 필요해 보인다.
기술매니점과 상담후 상당한 충격을 받았다.
기존에 알고있다고 생각 했던 기본적 지식과 객체지향에 대한 개념이 아직 제대로 정립되지 않은것 같다.
클래스와 메서드를 작성해보라고 하셨는대 그순간 사실 머리가 하햫게 변해버렸다.
따라서 오늘 다시 그 개념을 정리해봤다.
Wrapper Class
자바의 자료형
이럴 때에 기본자료타입을 객체로 다루기 위해서 사용하는 클래스들을 래퍼 클래스( Wrapper Class )라고 한다.
이런 객체를 포장 객체라고도 하는데 그 이유는 기본 타입의 값을 내부에 두고 포장하기 위함이다.
래퍼클래스로 감싸고 있는 기본 타입 값ㅇ느 외부에서 변경할 수 없다. 변경하고 싶다면 새로운 포장 객체를 만들어야 한다.
래퍼 클래스는 java.lang 패키지에 포함되어 있는데 다음과 같이 기본타입에 대응되는 래퍼 클래스들이 있다.
래퍼클래스는 박싱과 언박싱 과정을 통해 사용할 수 있다.
public class Wrapper_Ex {
public static void main(String[] args) {
Integer num = new Integer(17); // 박싱
int n = num.intValue(); //언박싱
System.out.println(n);
}
}
다음 코드를 통해 Integer 클래스에 속한 메서드를 이용해서 불러올 수 있다.
AutiBoxing 과 Auto UnBoxing
기본타입 값을 직접 박상, 언박싱하지 않아도 자동적으로 박싱과 언박싱이 일어나는 경우가 있다. 자동 박싱의 포장 클래스 타입에 기본값이 대입될 경우 발생.
예를 들어 다음과 같은 경우에 발생
public class Wrapper_Ex {
public static void main(String[] args) {
Integer num = 17; // 자동 박싱
int n = num; //자동 언박싱
System.out.println(n);
}
}
값 비교
래퍼 객체는 내부의 값을 비교하기 위해 == 연산자를 사용할 수 없다. 이 연산자는 내부의 값을 비교하는 것이 아니라 래퍼 객체의 참조 주소를 비교하기 때문이다.
비교 대상인 래퍼클래스는 객체이므로 서로의 참조 주소가 다르다. 객체끼리의 비교를 하려면 내부의 값만 얻어 비교해야 하기에 equals()를 사용해야 한다.
래퍼 클래스와 기본 자료형과의 비교는 ==연산자와 equals()연산 모두 가능하다.
public class Wrapper_Ex {
public static void main(String[] args) {
Integer num = new Integer(10); //래퍼 클래스1
Integer num2 = new Integer(10); //래퍼 클래스2
int i = 10; //기본타입
System.out.println("래퍼클래스 == 기본타입 : "+(num == i)); //true
System.out.println("래퍼클래스.equals(기본타입) : "+num.equals(i)); //true
System.out.println("래퍼클래스 == 래퍼클래스 : "+(num == num2)); //false
System.out.println("래퍼클래스.equals(래퍼클래스) : "+num.equals(num2)); //true
}
}