티스토리 뷰

1. final

  • 필드 적용
    :: 해당 필드의 값이 변하지 않음을 의미
    :: 해당 값이 객체라면 객체 내부의 값은 변경 가능
final int[] FINAL_ARRAY = new int[]{1, 2, 3};
FINAL_ARRAY[0] = 10; 
// 결과 = [10, 2, 3]

 


  • 메서드 적용
    :: 상속(Overriding)  X
    :: 해당 메서드가 꼭 한가지 구현으로만 사용되는 경우에 사용(Side-Effect 방지)

  • 클래스 적용
    :: 상속(extends) X
    :: 디자인 패턴의 원칙인 "상속보다는 합성"

2. static

:: 인스턴스화 없이 바로 사용 가능
:: 정적으로 만듦

  • 필드 적용 → 정적 필드
    :: 속한 클래스의 인스턴스 없이 사용 가능한 필드 == 정적 필드
    :: 보통 final과 같이 해서 사용

  • 메서드에 적용 → 정적 메서드
    :: 유틸리티 메서드의 경우 static으로 정의 + final도 같이 선언하여 사용
        → 파라미터값만 받아서 반환을 해주는 역할만 하므로
    :: 이런 조합 말고 유틸리티 메서드에서는 static + 유틸리티 클래스에서는 final로
       → 클래스의 상속(extends)을 막아 오버라이딩을 막고
      → static을 통한 간편한 사용이 가능

  • 클래스 적용 → 정적 클래스
    :: 속한 클래스의 인스턴스 없이 사용 가능한 (Nested) 클래스 == 정적 (Nested) 클래스
    :: 보통 inner 클래스는 non-static
    :: 근데 static 키워드 명시 시 → 정적 클래스로 상위 클래스 인스턴스없이 사용 가능
OuterClass outerClass = new OuterClass();

// 일반 클래스 내 정적 메서드 
// :: 객체를 통해 객체화(new InnerClass)를 한 후 메서드 호출 (정상사용 X)
outerClass.new InnerClass().publicMethod(); 

// 일반 클래스 내 정적 메서드 (정상사용 O) 
// :: 정적 메서드가 일반 클래스에 있든,
OuterClass.InnerClass      .publicMethod();

// 정적 클래스 내 정적 메서드 (정상사용 O) 
// :: 정적 메서드가 정적 클래스에 있든 상관없다. 
OuterClass.StaticInnerClass.publicMethod();

참조

ASAC 수업자료

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함