☕JAVA/🐣 강의 [JAVA]

[JAVA][기초] Static 과 final

디카페인라떼 2022. 10. 5. 17:08

[기초] 시리즈는 본강의를 수강후 정리한 글들 입니다.

Java for Beginner - YouTube

 

Java for Beginner

[교재 link] https://github.com/namoosori/java-for-beginner/tree/master/doc Java for Beginner 강의에서 다루는 내용은 다음과 같습니다. - Java 개요 : Java 언어가 어떤 언어이고 Java 언어를 이용해 프...

www.youtube.com


Static와 final

  • 클래스, 필드, 메소드에 모두 적용할 수 있는 키워드이며 각 위치에 따라 다른 의미를 가짐.
  •  static 
    • 정적 키워드로 정적 필드, 정적 메소드를 선언할 때 사용
  • final 
    • 필드에 정의할 경우 초기 한번의 초기화만 가능하여 이후에는 다른 값을 대입할 수 없음.

🚨 static,final 키워드가 어느 위치에 있느냐에 따라 그 기능이 다른 만큼 정확히 이해하고 사용해야 함.

 

final
  • 클래스, 필드, 메소드, 지역변수, 파라미터에 적용할 수 있습니다.
    • 클래스에 final :  상속을 허용하지 않음.
    • 메소드의  final :  오버라이딩 금지
    • 필드, 지역변수, 파라미터에 final :  한번 초기화한 이후에는 다른 값으로 변경할 수 없음.

  • final 필드의 초기화 방식
    1. 필드 선언 시점의 초기화
    2. 초기화 블록
    3. 생성자를 통한 초기화 방법 

 

static field

  • static 키워드가 적용된 필드 : 정적 필드 혹은 클래스 변수
    • 정적 필드는 해당 클래스의 모든 인스턴스 객체들이 공유하는 변수 이면 이런 의미가 바로 클래스 변수
    • 인스턴스화 할때마다 메모리가 할당되는 게 아니라 프로그램이 시작되면 static 메모리 영역에 잡혀서 공유하는 데이터
      • 정적 필드는 객체의 인스턴스화(생성) 없이 클래스 이름으로 정적 필드에 접근 가능
      • 단, 해당 정적 필드의 접근 지정자가 무엇인지에 따라 접근 방식에 차이가 있음.

( 메모리구조를 기반으로 잘 이해하기..!)

 

사용자 정의 상수
  • static과 final이 동시에 적용된 필드
  • 정적 필드에 final 키워드를 적용하여 값을 변경할 수 없도록 하는 것으로 사용자 정의 상수를 정의 가능
  • 사용자 정의 상수는 정적 필드나 메소드의 접근과 마찬가지로 클래스 이름을 통해 접근하여 사용
  • 사용자 정의 상수는 접근지정자의 범위에 따라 공유하는 범위가 결정
  • 대문자,언더바_ 사용 하여 정의

 

static Method
  • 정적 메소드는 static으로 선원된 메소드로써 인스턴스 없이도 호출 가능
    • 정적 메소드는 인스턴스 필드에는 접근할 수 없고, 정적 필드에만 접근 가능
    • 정적 메소드는 객체를 통해 사용될 수 있지만, 반드시 클래스명과 함께 사용
  • 정적 메소드는 언제 사용?
    • 객체의 상태에 접근하지 않고, 필요한 파라미터가 모두 명시적 파라미터인 경우(ex. Math.pow)
    • 클래스의 정적 필드에만 접근하는 경우
  • 🚨인스턴스 필스/메소드와 비교 !
    • 스태틱 필드 (클래스 변수)
      • 스태틱 메소드 : 접근 가능
      • 인스턴스 메소드  : 프로그램이 시작되며 이미 스태틱 필드의 메모리 공간이 할당되어 있기때문에 접근 가능
    • 인스턴스 필드
      • 스태틱 메소드 : 접근 불가 / 언제 어디서나 호출이 가능하나 인스턴스 필드는 객체화가 되어야지만 가능함
      • 인스턴스 메소드 : 접근 가능
    • 스태틱 메소드
      • 스태틱 필드 : 접근 가능 
      • 인스턴스 필드 : 접근 불가
      • 인스턴스 메소드 : 접근 불가 / 메소드안에 인스턴스 객체 생성 한 이후 에는 가능/ 클래스이름으로 호출/ this. 불가능
    • 인스턴스 메소드 
      • 스태틱 필드 : 접근 가능 / this. 가능 (권장하지 않음)
      • 인스턴스 필드 : 접근 가능