Contents

Java
2013.11.22 20:46

2.4.1 메모리와 클래스

조회 수 382 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
book_7252.png


2.4.1 메모리와 클래스

클래스로 데이터 타입을 만들었다면 새로운 데이터 타입으로 메모리를 생성하려 할 것이다. 그리고 메모리가 있고 없고의 문제는 아주 중요한 문제이다.

누구나 다 아는 뻔한 소리 같지만 자바를 약간 접한 사람들에게 이 부분은 무시할 수 없는 내용이다. 프로그램을 작성할 때 가장 중요한 문제가 바로 메모리가 있고 없고의 문제이다. 그렇기 때문에 가장 많이 발생하는 에러가 바로 메모리가 없는 상태에서 작업을 할 때 발생하는 에러(NullPointerException)이다.

□ 프로그램을 작성할 때 가장 많이 발생하는 에러
◇ 메모리가 없는 상태에서 작업을 할 때 발생하는 에러이다.

앞에서 만든 Person 클래스를 이용해서 다음과 같이 변수를 선언했다고 가정하자. 그리고 그 다음 메모리를 생성하지 않고 바로 값을 할당했다고 가정해보자.

▒ 메모리를 생성하지 않고 작업한 경우
1
2
3
4
Person brother; //객체 변수만 선언 - 메모리 없음
brother.age = 20;
brother.height = 170.0f;
brother.weight = 65.4f;

이럴 경우에 프로그래머가 만나는 에러는 메모리가 없다는 Null Pointer Exception이다.

단순한 내용이지만 지금 자바를 시작하거나 아니면 자바를 약간이라도 접한 분이라면 Null Pointer의 무서움을 이미 알고 있을 것이다. 가장 많이 나는 에러가 메모리가 없는데 작업을 하는 경우이며, 가장 무서운 에러가 바로 이 에러이다.

프로그램을 하면서 메모리가 있는지 없는지 감시하는 것은 전적으로 프로그래머의 책임이다. 위의 경우에는 여러분이 컴파일할 때 에러를 만날 수 있다. 그나마 다행이다. 프로그램이 실행되기 전에 에러를 잡아낼 수 있기 때문이다. 하지만 실제 에러는 다음과 같은 경우에 발생한다.

▒ 컴파일은 되지만 실행할 때 에러가 나는 경우
1
2
3
4
5
Person brother = null;
//다른 작업들
brother.age = 20;
brother.height = 170.0f;
brother.weight = 65.4f;

변수를 선언하고 선언한 변수에는 일단 아무것도 없다는 표시로 null로 초기화를 시켜둔다. 그리고 어디에선가 brother를 사용한다고 가정하자. 이 상황에서 컴파일러는 에러를 발생하지 않는다. 프로그램 실행 중에 보통 런타임이라고 한다. 런타임에 에러가 발생하게 된다.

단순히 몇 줄 되지 않으면 쉽게 찾을 수 있는 에러이다. 하지만 1000줄만 넘어가도 아니 몇 개의 파일만 얽혀 있어도 찾아내는데 상당한 시간이 걸린다. 메모리가 있는지 없는지 프로그램 로직을 잘 따라가야 잡을 수 있는 경우가 아주 많다.

프로그램을 짜기 전에 이것에 주의를 하면서 프로그램을 작성하면 이러한 에러에 빠르게 대응할 수 있을 것이다. 초보가 가장 무서워하는 에러, 그리고 중급자가 가장 골치 아파하는 에러가 바로 메모리가 없는 상태에서 객체를 사용했을 때 나타나는 에러이다.

지금까지 배운 클래스의 내용이 데이터 타입과 메모리의 존재 여부를 배우는 것이라고 해도 과언이 아니다. 클래스에서 이것은 기본이다. 이제 앞으로 배우게 될 클래스만의 특징에 대해서 알아보자.

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
44 Java 3.2.3 컴파일과 실행 IT장인 2013.12.28 340
43 Java 3.2.2 자바의 환경설정 IT장인 2013.12.28 451
42 Java 3.2.1 자바 JDK IT장인 2013.12.28 353
41 Java 3.1.2 Introduction IT장인 2013.12.28 242
40 Java 3.1.1 핵심 Question IT장인 2013.12.28 277
39 Java 2.4.3 결론 IT장인 2013.11.22 302
38 Java 2.4.2 배우게 될 클래스 IT장인 2013.11.22 350
» Java 2.4.1 메모리와 클래스 IT장인 2013.11.22 382
36 Java 2.3.5 클래스와 메모리 IT장인 2013.11.22 314
35 Java 2.3.4 클래스와 데이터베이스 IT장인 2013.11.22 353
34 Java 2.3.3 클래스의 역할 IT장인 2013.11.22 353
33 Java 2.3.2 자바에서 사용하지 않는 구조체 IT장인 2013.11.22 379
Board Pagination Prev 1 2 3 4 5 6 Next
/ 6