CS
  • CS-Study
  • database
    • B-Tree와 B+Tree
    • DB JOIN
    • DB Lock
    • DB 트래픽
    • DBCP (DB Connection Pool)
    • Flyway
    • Message Broker
    • MySQL InnoDB 스토리지 엔진
    • MySQL 엔진 아키텍처
    • RDB와 NoSQL
    • Redis
    • SQL Injection
    • 스키마 (Schema)
    • Table Scan과 Index Scan
    • Apache Kafka
    • Key
    • 뷰 (View)
    • 인덱스
    • 정규화
    • RDBMS, NoSQL의 클러스터링/리플리케이션 방식
    • 트랜잭션(Transaction)
    • 트랜잭션의 격리성(Transaction Isolation)
    • 프로시저와 트리거
    • DB 정규화 (Normalization)
  • etc
    • MSA
    • REST, REST API, RESTful
    • SOLID 원칙
    • TDD (Test-Driven Development)
    • 서버리스
    • 컨테이너와 도커
  • java
    • Collections
    • Garbage Collection
    • Generic
    • JDBC
    • Java Virtual Machine(JVM)
    • Java Thread
    • Java8 vs Java11 vs Java17
    • 객체지향 프로그래밍 OOP (Object Oriented Programing)
    • Optional
    • RxJava(Reactive Programming)
    • 문자열(String & StringBuffer & StringBuilder)
    • Synchronized
    • Virtual Thread
    • Wrapper Class
    • Equals()와 Hashcode()
    • final
    • Jackson 라이브러리
    • 리플렉션(Reflection)
    • static class와 static method
    • 스트림(Stream)과 람다(Lambda)
    • 스프링 프레임워크에서 사용되는 디자인 패턴
    • 예외처리(Exception)
    • Java Annotation
    • 추상클래스와 인터페이스
  • network
    • 3-way handshake
    • 4-way Handshake
    • DHCP(Dynamic Host Configuration Protocol)
    • DMZ(DeMilitarized Zone)
    • DNS(Domain Name System)
    • HTTP Method
    • HTTP 버전 비교
    • HTTP status code
    • HTTP
    • IP Address
    • Mutiplexing & Demultiplexing
    • OSI 7계층
    • SOP, CORS
    • TCP와 UDP
    • XSS와 CSRF
    • gRPC
    • Stateless와 Connectionless
    • 라우터 Router
    • 로드밸런서(Load Balancer)
    • 브라우저에 URL입력시 네트워크 상 일어나는 일
    • 서브넷 마스크, 게이트웨이
    • 웹 소켓과 소켓 통신
    • 쿠키(Cookie)와 세션(Session)
  • operating-system
    • IPC (Inter Process Communication)
    • 인터럽트
    • TLB
    • 스레싱 Thrashing
    • Thread Pool, Fork-Join
    • Thread Safe
    • 프로세스
    • 가상 메모리
    • 데드락 (DeadLock, 교착 상태)
    • 동기/비동기 & 블로킹/논블록킹
    • 동기화(Synchronization)
    • 메모리 할당과 단편화
    • 뮤텍스와 세마포어, 모니터
    • 세그먼테이션과 페이징
    • 운영체제
    • 캐시 메모리
    • Context switching(문맥 교환)
    • 컴파일
    • 파일 시스템
    • 페이지 교체 알고리즘(Page Replacement Algorithm)
    • 프로세서 스케줄링 알고리즘
    • 프로세스 주소 공간
  • spring
    • @Transactional
    • AOP(Aspect-Oriented Programming)
    • DTO, DAO, VO, Entity
    • DispatcherServlet
    • Hibernate, JPA, Spring Data JPA
    • Ioc와 DI
    • JPA 연관관계 맵핑
    • N+1 Problem
    • ORM
    • Persistence Context
    • SQL Mapper vs ORM vs QueryBuilder
    • Servlet Filter와 Spring Interceptor
    • Servlet
    • Spring MVC와 Spring Boot
    • Tomcat
    • WebFlux
Powered by GitBook
On this page
  • final이란?
  • final의 각 선언 위치에 대한 기능
  • final 장점
  • static final
  • Ref
  1. java

final

final이란?

  • 상속, 변경 등을 금지하는 규제

    • 주로 불변성을 확보하기 위해 사용

final의 각 선언 위치에 대한 기능

변수 (기본형과 참조형)

  • 해당 변숫값 수정 불가

  • 기본형 변수: 변수가 스택에 직접 값으로 저장

    • final 사용 시 : 값 자체가 변경될 수 없음

  • 참조형 변수: 변수가 힙에 객체의 주소를 가리키는 형태로 저장

    • final 사용 시 : 변수가 가리키는 객체의 변경은 막지만, 객체 내부의 값은 변경될 수 있음

메소드

  • 해당 메소드 오버라이드 불가

클래스

  • 해당 클래스 상속 불가

final 장점

  1. 스레드 동기화 문제 방지 (스레드 안정성)

    • 스레간 공유없이 안전한 공유 가능

  2. 높은 코드 안정성

    • 의도치 않은 값의 변경 방지

    • 불변성이 요구되는 값의 명시적 표현 (ex. 상수)

  3. 성능 최적화

    • JIT컴파일러(java 바이트 코드 → 기계어 변환시 사용)가 final필드에 대해 더 빠른 액세스 처리

      • 컴파일 시점에 이미 변수의 값을 알 수 있음

      • 메서드 호출에 따른 오버헤드를 줄일 수 있음

  4. 클래스의 의도된 동작 보존 가능

    • 오버라이딩 및 상속 제한으로 클래스의 의도된 동작 보존

    • 오버라이딩을 통한 부작용 방지

⇒ 코드 가독성, 유지보수성, 안정성 향상에 기여

static final

static 키워드를 사용하게 되면 최초 클래스를 로드할 때 메모리에 할당해 종료될 때까지 유지한다.

final 키워드와 함께 사용하게 되면 모든 인스턴스에 대해서 동일한 값을 설정하여 사용할 수 있다. 즉 상수를 뜻한다.

  • final만 쓴다고 상수는 아니다. 상수는 객체마다 저장되면 안된다.(static 특징)

하지만 JDK 1.5 버전 이후로 Enum 클래스가 등장하면서 상수 관리는 static final보단 Enum을 주로 이용한다.

Enum이란?

  • static final 처럼 Method Area 영역에 저장.

    • 컴파일할 때, Java.Lang.Enum 클래스를 상속받도록 처리됨.

  • 상수를 한 곳에 모아 관리하므로, 유지보수에 유리함

  • 상수에 필드,메서드,생성자 등을 가질 수 있어 복잡한 상수 관리 가능.

Ref

PreviousEquals()와 Hashcode()NextJackson 라이브러리

Last updated 1 year ago

Java Enum 활용기
상수는 왜 Static과 Final을 같이 사용할까?