아래 내용은 부스트코스 <자바로 구현하고 배우는 자료구조> 강의를 들으며 정리한 것입니다.
Autoboxing
기본 자료형은 JVM에게 정확히 필요한 만큼의 메모리를 할당받는다. 반면 객체에 대해서는 4byte 포인터와 객체에 맞는 힙 공간을 할당한다. 기본 자료형은 객체 메소드를 상속받지 않는다. 그러나 자바에는 객체 버전의 기본 자료형인 Wrapper 클래스가 있다.
Java 컴파일러는 기본 자료형 autoboxing을 이용해서 이 둘을 적절하게 서로 바꾼다. 즉 Autoboxing은 기본 자료형(Primitives type)의 값을 해당하는 Wrapper 클래스의 객체로 바꾸는 과정이다.
강의가 끊겨서 오라클의 자바 공식문서에서 가져온 예시.. (제네릭 사용)
List<Integer> li = new ArrayList<>();
for (int i = 1; i < 50; i += 2)
li.add(i);
이 코드는, li에 int형을 넣어도 잘 컴파일 된다. 자바 컴파일러가 Integer 객체를 i에서 만들고 li에 넣기 때문에 그렇다.
실제로 아래와 같이 변환하는 것이다.
List<Integer> li = new ArrayList<>();
for (int i = 1; i < 50; i += 2)
li.add(Integer.valueOf(i));
래퍼 클래스 (Wrapper Class)
래퍼 클래스는 객체 버전의 기본 자료형이다.
| Primitives | Wrapper |
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| double | Double |
| char | Char |
| boolean | Boolean |
예외 상황 코드 작성
모든 예외는 java.lang.Exception 클래스를 상속받는다.
NullPointerException / ArrayIndexOutofBoundsException / NoSuchElementException 등...
(질문.. 위의 예외는 각각 무엇을 뜻하는 건가요: ) 때문에 우리는 코드를 디버깅 할 때 에러 메세지를 보고 무엇이 잘못되었고 고쳐야 할 부분이 정확하게 어디인지 단서를 얻을 수 있다.
아래와 같은 예외 상황에 대한 자바 코드는 코드를 개인화하고 디버깅을 쉽게 만들어준다.
// Exception 클래스 상속
public class FileFormatException extends Exception{
public FileFormatException (){
// super 호출
super();
}
public FileFormatException (String s){
super(s);
}
}
// 예외 상황이 발생하면 throw
throw new FileFormatException("Your file is not well formatted") //문자열이 super에 전달, 메세지 출력
먼저 exception 패키지를 선언하고, Exception 클래스를 상속받고 생성자를 만든 후, 생성자 안에서 super를 호출한다.
super: 어떤 것을 상속받았을 때 상속받은 클래스의 생성자를 호출한다는 의미
이클립스에서 generate constructor(s) from a superclass 를 누르면 위와 같은 코드를 만들어 준다.
생각해보기
Q. 래퍼 클래스는 기본 자료형과 어떤 점이 다른가?
A. 래퍼 클래스는 객체 버전! 즉 상속, Object 메소드 사용이 가능하다.
Q. 예외 상황의 이름을 적절하게 설정하는 게 프로그래밍하는 데에 어떤 도움이 될까?
A. 오류의 범위를 좁혀 문제 코드를 파악하는데 도움이 된다.
comment
교수님이 아마 ~는 아실겁니다, 자주 보셨을 겁니다 하실때마다 찔림.. 저는 아직 아무것도 모르고 자주 보지도 못했어요.. 좀만 천천히..
'Programming > java 자료구조' 카테고리의 다른 글
| 2-2) 연결 리스트 - addFirst, addLast (+ 자료구조의 경계 조건) (0) | 2022.07.30 |
|---|---|
| 2-1) 연결 리스트, 노드와 크기 (0) | 2022.07.25 |
| 1-4) 제너릭 프로그래밍, 매개변수화 타입 (0) | 2022.07.23 |
| 1-3) 객체지향 프로그래밍, Comparable 인터페이스 (0) | 2022.07.23 |
| 1-2) 빅 오 표기법 (0) | 2022.07.21 |