정의
변경할 수 없는 값
- 프로그램 실행 중에 한 번 초기화되면 그 이후에 수정할 수 없음
- 때문에 코드의 가독성과 유지보수성을 높이고, 예기치 않은 값 변경을 방지하는 데 도움을 줌
사용 이유(= 장점)
1. 가독성 향상:
의미 있는 이름을 사용하여 코드의 의도를 명확히 함
2. 유지보수성 개선:
반복되는 값을 한 곳에 정의해 관리하기 쉽게 만듦
3. 재사용성:
여러 곳에서 동일한 상수를 사용해 코드 중복을 줄임
4. 안정성 제공:
의도하지 않은 값 변경을 방지
사용법과 주의사항
1. 상수 정의 방법
1) final 키워드 사용
final 키워드는 한 번 초기화되면 변경할 수 없는 값을 선언할 때 사용
public class Constants { public static final double PI = 3.14159; public static final String APP_NAME = "My Application"; }
public static final 어디서든 접근 가능 객체를 생성하지 않고도
클래스명으로 바로 접근 가능선언한 후 값 변경 불가
2) 초기화 방법
① 선언과 동시에 초기화
public static final int MAX_USERS = 100;② 생성자에서 초기화
- final 필드를 생성자에서 초기화할 수 있지만, 이는 인스턴트 상수로 취급
public class AppConfig { public final String DATABASE_URL; public AppConfig(String url) { this.DATABASE_URL = url; // 생성자에서 한 번만 초기화 가능 } }
2. 상수의 활용
1) 클래스 상수로 사용
클래스 상수는 공유되는 불변 데이터를 정의할 때 유용
System.out.println("PI 값: " + Constants.PI); // 결과: PI 값: 3.14159
2) 인터페이스에 상수 정의하기
인터페이스에 상수를 정의하면 구현 클래스에서 공통으로 사용이 가능
public interface HttpStatus { int OK = 200; int NOT_FOUND = 404; int INTERNAL_SERVER_ERROR = 500; } // HttpStatus.OK처럼 바로 접근 가능
3) 열거형(Enum) 활용
특정 값 집합을 나타내는 상수 그룹을 enum으로 정의 가능
- 가독성, 타입 안전성에 장점이 있음public enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY } // Day.MONDAY와 같이 사용할 수 있음
3. 주의사항
1) final 변수는 선언 후 반드시 초기화되어야 함
-> 그렇지 않으면 컴파일 오류가 발생
2) 불변 객체의 사용
-> final로 참조한 객체 내부 값은 변경될 수 있으므로, 불변 객체(Immutable Object)를 사용하는 것이 좋음
public static final List<String> CITIES = List.of("Seoul", "Busan", "Incheon");
3) 인터페이스에 상수를 너무 많이 추가하지 말 것
-> 관리가 어려워질 수 있음
-> 필요한 경우 전용 상수 클래스를 사용하는 것이 좋음
사용 예시
public class MathConstants { public static final double PI = 3.14159; public static final double E = 2.71828; public static double getCircleArea(double radius) { return PI * radius * radius; } public static double getExponential(int exponent) { return Math.pow(E, exponent); } public static void main(String[] args) { System.out.println("Circle Area (r=2): " + getCircleArea(2)); System.out.println("e^2: " + getExponential(2)); } }
출력 결과:Circle Area (r=2): 12.56636 e^2: 7.3890560989306495
비고
1. 평소에 자주 쓰면서도 자세히 알지 못했구나 싶다. 이 참에 글 쓰면서 좀 외움
레퍼런스
1. 멘토링 강의, 구글링, 코드 예시는 ChatGPT
'개발지식 조각 > Java' 카테고리의 다른 글
| [Java] IllegalArgumentException (0) | 2024.10.23 |
|---|---|
| 오버라이딩(Overriding) (0) | 2024.10.23 |
| 리터럴(Literal) (0) | 2024.10.22 |
| 제어자(Modifier) (0) | 2024.10.22 |
| Google Java Style Guide & 우테코 자바 스타일 가이드 (0) | 2024.10.17 |