[Java]final keyword에 대해 아시나요?

자바에 final keyword에 대해 아시나요?

자바를 사용하시면 경력자분이라면 당연히 아시겠지만, 저처럼 기본이 부족한 사람에겐

간간히 코드를 보다 헷갈리는(!)일이 발생하곤 합니다.

그래서 아래와 같이 직접 테스트코드를 작성했습니다.

import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
import java.util.HashMap;
import java.util.Map;
import org.junit.Test;
import com.google.common.collect.Maps;

public class FinalKeywordTest {

	public static final String testStr = "test";
	public static final Map<String, Boolean> map1 = Maps.newConcurrentMap();
	public static final Map<String, Boolean> map2 = new HashMap<String, Boolean>();

	@Test
	public void 파이널데이타타입에_데이타는들어가나() {
		map1.put("test", Boolean.TRUE);

		assertTrue(map1.get("test"));
	}

	@Test
	public void 파이널데이타타입에_데이타는들어가나_구아바아님() {
		map2.put("test", Boolean.FALSE);

		assertFalse(map2.get("test"));
	}

	@Test
	public void 파이널_상수값_변경() {
		testStr = "test2";

		assertThat(testStr, is("test"));
	}
}

코드를 딱 보시면 대부분 아시겠지만, 에러가 하나 있죠?

네! 바로 “파이널_상수값_변경” 메서드입니다. “testStr” 변수는 “final“가

붙어있음에도 값을 변경하려했죠. 그래서 테스트가 안되고 당근 실패합니다.

제가 헷갈려했던 부분은 바로 “final” keyword가 붙어있으면 무조건 값을 변경하지

못하는 것으로 생각했습니다. 뭐 객체도 마찬가지라고 생각했죠 ㅉㅉ ㅡㅡ;

정리하지면, “final” keyword의 사용은

  • 변수에서는 값을 재정의 하지 못하는 용도로 사용
  • 메서드에서는 해당 메서드를 오버라이드 하지 못하는 용도로 사용
  • 클래스에서는 해당 클래스를 상속해서 구현하지 못하는 용도로 사용

물론 제가 작성한 테스트케이스는 3번째에 해당하는 것이구요.

저처럼 기본이 없어서 헤매지 마세요^^

*참고 url

Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

w

%s에 연결하는 중