오늘부터 TIL 할거다!!!!!!!!!!
오늘은 카카오테크 부트캠프 첫 수업날이었다.
풀스택 과정에서의 목표에 대해서 배웠고, 강사님과 풀스택 교육생들 간의 라포를 형성하는 과정을 가졌다.
오후수업에선 자바 기초 수업을 들었는데 키워드만 봤을때는 매우 간단하다.
- 변수
- 메서드
- 접근제어자
- 클래스 다이어그램
- 원시 자료형
- 참조 자료형
해당 키워드에 대해 한줄로 요약을 해보는 시간을 가졌고, 헷갈리는 내용이 있어 정리를 해보았다.
원시자료형, 참조 자료형, Wrapper Class
원시자료형이란 자바의 int, char, float, double, boolean, long 등과 같은 기본 자료형을 말한다.
그리고 그 외의 자료형들 (String, Array, Pos(Pos클래스 만든 것)..)등은 모두 참조 자료형이라고 볼 수 있다.
다만 여기서 헷갈린 개념은 Wrapper Class이다. (Wrapper Class또한 참조자료형이다.)
Wrapper Class는 원시(기본) 자료형을 객체로 감싸는 역할을 한다.
굳이 이런게 왜 필요한지에 대해 생각이 들 수 있지만 자바를 하고 있다면 굉장히 빈번하게 Wrapper Class를 사용하고 있다.
List<Integer> list = new ArrayList<>();
위의 코드에서 볼 수 있듯이 제네릭에서 굉장히 빈번하게 사용하고 있다!
이 이유는 제네릭이 참조 자료형만을 허용하기 때문에 이 과정이 필요한 것이다.
추가로 자연스럽게 나오는 개념이 Autoboxing과 Unboxing이 있다.
Autoboxing과 Unboxing
Autoboxing은 자바 컴파일러가 원시(기본) 자료형과 이에 해당하는 Wrapper Class 간에 자동 변환을 수행하는 것을 말한다.
예를 들어 다음과 같은 코드를 볼 수 있다.
Character ch = 'a';
위 코드는 기본 자료형인 char 값을 Character라는 객체로 자동 변환(Autoboxing)하는 예시이다.
조금 더 심화(?)된 예제로는 다음이 있다.
List<Integer> list = new ArrayList<>();
for (int i = 1; i < 50; i += 2)
li.add(i);
list는 Integer 객체의 리스트이지만, int 값을 직접 추가(add) 해도 컴파일러는 오류를 발생시키지 않는 것을 볼 수 있다.
이 이유는 바로 컴파일러가 int값을 Integer 객체로 Autoboxing 하기 때문이다.
Unboxing은 Wrapper Class를 기본 자료형으로 변환(Unboxing)하는 것이다.
예제를 바로 봐보도록 하자.
public static int sumEven(List<Integer> li) {
int sum = 0;
for (Integer i : li)
if (i % 2 == 0)
sum += i;
// sum += i.intValue(); 런타임에는 이 코드가 실행되며 int 타입으로 변환됩니다.
return sum;
}
이 메서드는 List의 값 중에서 짝수 값들의 합을 구한다.
이때, % 연산자와 += 연산자는 기본 자료형에만 적용된다. 하지만 Integer 타입인 i가 컴파일 에러 없이 잘 수행되는 걸 볼 수 있다.
이는 Unboxing이 수행됨을 볼 수 있다. (Integer to int)
오늘 배운 걸 정리해 보자면 다음과 같다.
- Wrapper Class와 참조 자료형은 상반된 개념이 아니다. (참조 자료형에 속한다.)
- Autoboxing이 일어나는 경우는 다음과 같다.
- 메서드 매개변수로 기본자료형이 전달될 때, 메서드가 Wrapper Class 객체를 요구하는 경우
- Wrapper Class 변수에 기본 자료형 값을 할당할 때
- Unboxing이 일어나는 경우는 다음과 같다.
- 메서드 매개변수로 Wrapper Class 객체가 전달될 때, 메서드가 기본 자료형 값을 요구하는 경우
- 기본 자료형 변수에 Wrapper class 객체가 할당될 때