Java Final

2023. 3. 31. 13:16·📘 Backend/Java

📘 Final

  • 재할당이 금지된 변수. 변수와 같이 선언-할당-사용이 가능하지만 재할당이 금지되어있음.
  • 상수는 final이라는 키워드를 사용해 선언할 수 있으며, 관례적으로 대문자에 _를 넣어 구분하는 형태를 사용
  • ex) final double CALCULATOR_PI = 3.14;

상수를 사용하는 이유

  • 프로그램이 실행되면서 값이 변하면 안되는 경우
  • 코드의 가독성 높이기 위함 (값을 저장하고있는 상수명으로 값을 사용가능하기 때문)
  • 코드 유지관리를 손쉽게

초기화 방법

  1. 필드 선언 시 값 할당
  2. 생성자로 초기화

Final Object

객체 변수에 final을 선언하면 그 변수에 다른 참조 값을 지정할 수 없다.

즉, 한번 생성된 final 객체는 같은 타입으로 생성이 불가능하고, 객체 자체는 변경이 불가능하지만
객체 내부 변수는 변경이 가능하다.

@Getter
@Setter
class Company {
    String name = "회사명";
}

public class Final_Ex {
    public static void main(String[] args) {
        // 객체를 한번 생성하면 재생성 불가능
        final Company company = new Company();
        // 클래스의 필드는 변경이 가능하다
        company.setName("ex회사");
    }
}

Final Class

final 클래스는 상속이 불가능하지만 필드는 setter를 통해 변경이 가능하다.

final class Company {
    String name = "회사명";

// final 클래스는 상속이 불가능하다
class Company_A extends Company {}
}

Final Method

메서드에 final을 사용하면 상속받은 부모 클래스의 final 메서드를 오버라이딩이 불가능하다.

자신이 만든 메서드를 변경 불가능하게 만들고 싶을때 사용된다.

class Company {
    String name = "회사명";

    public final void print() {
        System.out.println("회사 이름은 :" + name + " 입니다");
    }
}

class Company_A extends Company {
    String name = "회사A";

    // 메서드 오버라이딩 불가능
    public void print() {}
}

Final Parameter

class Company {
    String name = "회사명";

    // name = "회사1" 이라고 가정하고, 파라미터로 받은 name 변수는 변경이 불가능하다
     public void setName(final String name) {
         this.name = name;
     }
}

class Final_Ex {
    public static void main(String[] args) {
        final Company company = new Company();
        company.setName("회사2"); // 변경 불가능
    }
}
저작자표시 (새창열림)

'📘 Backend > Java' 카테고리의 다른 글

Java 제어문 & 반복문  (0) 2023.03.31
Java Operator & I/O  (0) 2023.03.31
Java String Class  (0) 2023.03.31
Java Type  (0) 2023.03.31
Java 예약어  (0) 2023.03.31
'📘 Backend/Java' 카테고리의 다른 글
  • Java 제어문 & 반복문
  • Java Operator & I/O
  • Java String Class
  • Java Type
신건우
신건우
조용한 개발자
  • 신건우
    우주먼지
    신건우
  • 전체
    오늘
    어제
    • 분류 전체보기 (422)
      • 📘 Frontend (71)
        • Markup (1)
        • Style Sheet (2)
        • Dart (8)
        • Javascript (12)
        • TypeScript (1)
        • Vue (36)
        • React (2)
        • Flutter (9)
      • 📘 Backend (143)
        • Java (34)
        • Concurrency (19)
        • Reflection (1)
        • Kotlin (29)
        • Python (1)
        • Spring (42)
        • Spring Cloud (5)
        • Message Broker (5)
        • Streaming (2)
        • 기능 개발 (5)
      • 💻 Server (6)
        • Linux (6)
      • ❌ Error Handling (11)
      • 📦 Database (62)
        • SQL (31)
        • NoSQL (2)
        • JPQL (9)
        • QueryDSL (12)
        • Basic (4)
        • Firebase (4)
      • ⚙️ Ops (57)
        • CS (6)
        • AWS (9)
        • Docker (8)
        • Kubernetes (13)
        • MSA (1)
        • CI & CD (20)
      • 📚 Data Architect (48)
        • Data Structure (10)
        • Algorithm (8)
        • Programmers (17)
        • BaekJoon (5)
        • CodeUp (4)
        • Design Pattern (4)
        • AI (0)
      • ⚒️ Management & Tool (8)
        • Git (7)
        • IntelliJ (1)
      • 📄 Document (10)
        • Project 설계 (6)
        • Server Migration (3)
      • 📄 책읽기 (2)
        • 시작하세요! 도커 & 쿠버네티스 (2)
      • 🎮 Game (4)
        • Stardew Vally (1)
        • Path of Exile (3)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      React #Markdown
      Lock #Thread #Concurrency
      GStreamer #Pipeline
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.0
    신건우
    Java Final
    상단으로

    티스토리툴바