총 게시물 25건, 최근 0 건 안내 RSS 글쓰기
이전글  다음글  목록 글쓰기
[2.코드 지식편]

1장 7. 상수는 사용시 주의해야 한다.

글쓴이 : 카이로 날짜 : 2014-02-06 (목) 10:22 조회 : 6696
글주소 : http://www.androidside.com/430/93
 
  BSTYLE 텐바이텐
포근함과 실용성을 높이는 감성디자인. BSTYLE 역시 텐바이텐
10x10.co.kr
  영화 매니아라면 oksusu
무료 영화부터 최신 영화까지! 보는 재미가 우수수, oksusu
www.oksusu.com
  안전하고 빠른속도 파일캐스트
HD고화질, 초고속 다운로드 및 실시간 바로보기, 모바일 100% 지원.
filecast.kr
신청하기


7. 상수는 사용시 주의해야 한다.

final 제한자를 변수에 선언하면 상수가 된다. 상수는 프로그램 실행 중에 절대로 변경할 수 없기 때문에 프로그램 동작 중에 변경되서는 안되는 변수들에 final 를 선언하여 상수로 만든다. 하지만 이 상수를 사용함에 있어서 주의할 점이 있다. 먼저 아래 Common 클래스를 보도록 하자.

class Common {
    public static final boolean DEBUG = true;
}

Common 클래스의 DEBUG 상수는 모든 클래스에서 참조하기 위한 상수로서 이 값이 true 일 경우에는 디버그 코드를 실행하고, 그렇지 않을 경우에는 디버그 코드를 실행하지 않도록 하기 위해서 사용하고자 한다. 이 값을 개발 중에는 true 로 사용하다가 개발이 끝난 뒤에 false 로 변경하고 Common 클래스만 컴파일하면 어떻게 될까? 다른 클래스에서는 Common 클래스의 DEBUG 상수가 false 로 설정된 것을 알지 못하기 때문에 여전히 디버그 코드를 실행할 것이다. 이렇게 되는 이유는 컴파일러가 상수를 사용하는 모든 클래스의 코드를 상수 참조가 아닌 상수 값으로 변경하기 때문이다.

다음과 같이 DEBUG 상수를 사용하는 코드가 있다고 했을 때 DEBUG 가 true 라면 화면에 지정된 문자열이 출력될 것이다.

if(DEBUG) System.out.println("지금은 디버그중입니다.");

하지만 컴파일러는 DEBUG 를 DEBUG 변수가 가지고 있는 값으로 치환하기 때문에 위의 코드는 다음과 같이 true 가 된다.

if (true) System.out.println("지금은 디버그중입니다.");

그렇기 때문에 Common 클래스의 상수를 false 로 변경하더라도 DEBUG 변수를 사용하는 다른 클래스의 코드는 변경하기 이전의 값인 true 를 그대로 갖고 있게 된다. 그래서 아무리 Common 클래스의 상수의 값을 변경하더라도 다른 클래스에는 제대로 적용되지 않는 것이다. 이 문제를 해결하기 위해서는 해당 상수에 선언된 final 을 제거하여 일반 변수로 선언하거나 상수를 사용하는 모든 클래스를 다시 컴파일해야 한다.

이 글은 무단전제나 무단배포가 금지된 글입니다. 공유하고자 한다면 제목과 링크만 공유하기 바랍니다.


로그인 창이 있는 "정보 수정"에서
서명 이쁘게 등록해보세요 ^^

jjinuri 2014-02-20 (목) 11:04
감사합니다 ^^   
댓글주소
퍼플덕 2014-03-11 (화) 13:32
오 이거 좋은 정보네요. 
final로 설정된 상수는 다른 클래스에서는 상수 참조가 아닌 상수 값으로 가지고 있다.
댓글주소
     
     
안사 이쁜이 2014-03-11 (화) 13:32
축하드립니다. ;)
퍼플덕님은 안사 이쁜이에 당첨되어 4 포인트 지급되었습니다.
멍가인 2014-04-11 (금) 17:41
변하지 않는게 final아니에요?
댓글주소
     
     
멍가인 2014-04-11 (금) 17:42
고정값이라고 해야되나 음..? 그렇게 알고잇는데 
댓글주소
딩굴이 2014-06-12 (목) 09:55
감사합니다.
댓글주소
     
     
안사 이쁜이 2014-06-12 (목) 09:55
축하드립니다. ;)
딩굴이님은 안사 이쁜이에 당첨되어 10 포인트 지급되었습니다.
꾸꾸링 2014-07-11 (금) 16:01
감사합니당.
댓글주소
YGFree 2014-08-08 (금) 14:12
잘봤습니다~
댓글주소
공개 2014-08-15 (금) 02:24
잘보고갑니다
댓글주소
영달 2014-12-01 (월) 00:27
잘 보았습니다..
댓글주소
필연 2015-03-04 (수) 14:32
잘 보았습니다..
댓글주소
shadow2496 2015-03-29 (일) 22:56
감사합니다.
댓글주소
masami 2015-05-09 (토) 13:08
이해가 제대로 되네요.
댓글주소
공부좀 2015-06-26 (금) 00:31
감사해요,,ㅎㅎ
댓글주소
대학생예비창… 2015-07-01 (수) 10:30
나도 이쁜이?
댓글주소
devhyeok 2016-02-03 (수) 14:55
감사합니다.
댓글주소
라쿠드 2016-08-28 (일) 21:46
감사합니다.
댓글주소
알지롤 2016-10-01 (토) 14:20
나두 이쁜이...ㅋㅋ
댓글주소
indist 2016-10-03 (월) 02:00
댓글주소
이전글  다음글  목록 글쓰기

총 게시물 25건, 최근 0 건 안내 RSS
번호 분류 제목 추천 조회
25 0.소개  0.1 머리말 37 29 10160
24 0.소개  0.2 목차 16 10 6794
23 1.기본 지식편  0장 기본 지식편 27 30 10375
22 1.기본 지식편  1장 객체지향 프로그래밍 33 25 14040
21 2.코드 지식편  1장 0. 변수, 데이터형 20 15 7419
20 2.코드 지식편  1장 1. 가장 빠른 변수는 지역 변수이다. 19 14 7655
19 2.코드 지식편  1장 2. 멤버 변수를 중복 초기화하지 않는다. 17 11 7591
18 2.코드 지식편  1장 3. 멤버 변수의 디폴트 값에 대해 알아야 한다. 17 7 7802
17 2.코드 지식편  1장 4. 블록 내에서 사용할 변수는 지역 변수로 선언해야 한다. 16 12 6747
16 2.코드 지식편  1장 5. 자동 변수를 사용할 때는 항상 초기값을 설정해야 한다. 19 10 7385
15 2.코드 지식편  1장 6. 상수는 되도록 기본 데이터형을 사용해야 한다. 16 11 7061
14 2.코드 지식편  1장 7. 상수는 사용시 주의해야 한다. 20 11 6697
13 2.코드 지식편  1장 8. 변수는 되도록 사용 시점에 선언해야 한다. 15 7 5560
12 2.코드 지식편  1장 9. 객체보다는 기본 데이터형을 사용해야 한다. 13 7 5837
11 1.기본 지식편  1장 객체지향 프로그래밍 체크 포인트 17 9 6162
10 1.기본 지식편  2장 소스 코드 구성 28 15 10219
9 1.기본 지식편  2장 소스 코드 구성 체크 포인트 8 8 5571
8 1.기본 지식편  3장 클래스 구성 22 10 9933
7 1.기본 지식편  3장 클래스 구성 체크 포인트 6 4 5310
6 1.기본 지식편  4장 제한자 11 6 7261
5 1.기본 지식편  4장 제한자 체크 포인트 4 3 4971
4 1.기본 지식편  5장 연산자 11 7 9779
3 1.기본 지식편  5장 연산자 체크 포인트 4 5 5696
2 0.소개  스피드 자바의 오프라인 서적의 평. 11 8 6504
 


Copyright ⓒ www.androidside.com. All rights reserved.
채팅 권한: 글쓰기 1개
2레벨 이상만 대화 가능
공개 채팅: 평일 !(9시 ~ 17시),토,일
안사2 변경사항 보러가기 챗방이 잘 안보이면 크롬에서 접속해주세요
챗방 숨기기 |  챗방 보이기