상수 (Constant)
목차
📍 상수 (Constant)
– 변하지 않는 데이터 = 변하지 않는 데이터를 저장한 변하지 않는 변수.
– 보통 클래스 내에서 상수를 선언 시 public static final 형태로 선언.
1 ) public : 누구나 접근 가능
2 ) static : 클래스 로딩 시 함께 로딩되어 인스턴스 생성과 무관하며,
클래스 하나 당 하나만 생성되도 모든 인스턴스가 공유함.
→ 클래스명만으로 접근 가능 (클래스명.변수명)
3 ) final : 데이터 변경 불가 = 상수
EX ) |
• 상수를 활용하지 않는 클래스
class CarInfo{
// 멤버변수
private String company;
private String carModeName;
private int color;
// Getter & Setter 메서드
// alt + shift + s + r
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
public String getCarModeName() {
return carModeName;
}
public void setCarModeName(String carModeName) {
this.carModeName = carModeName;
}
public int getColor() {
return color;
}
public void setColor(int color) {
this.color = color;
}
}
• main 메서드에서 실행
// 인스턴스 생성
CarInfo ci = new CarInfo();
// 객체에 차량 정보를 저장
ci.setCompany("hyundai");
ci.setCarModeName("SONATA");
ci.setColor(0x000000);
if(ci.getCompany() == "HYUNDAI") { // HYUNDAI와 hyundai는 다른 문자열
System.out.println("현대자동차 입니다.");
}else {
System.out.println("현대자동차가 아닙니다.");
}
코드 분석
5~7 | – 복잡한 값을 지정하기 어려움. – 값을 입력할 때 문자열 등의 오타로 인한 오류 발생 가능성 있음. |
9~13 | – 차량 정보를 비교해야 할 경우, 문자열이라면 대소문자에 대한 차이 등으로 잘못된 판별을 할 수 있음. → 현대자동차가 맞는데 대문자로 쓰여 '아니다' 라는 결과가 출력됨. |
✓ 실행 결과
현대자동차가 아닙니다.
• 상수를 활용한 클래스
class CarInfoWithConstant{
private String company;
private String carModelName;
private int color;
// 1 ) 제조사 정보를 문자열로 저장하는 상수 선언
public static final String COMPANY_HYUNDAI = "HYUNDAI";
public static final String COMPANY_KIA = "KIA";
public static final String COMPANY_CHEVROLET = "CHEVROLET";
// 2 ) 차량 모델 정보를 문자열로 저장하는 상수 선언
public static final String CAR_MODEL_NAME_SONATA = "SONATA";
public static final String CAR_MODEL_NAME_K5 = "K5";
public static final String CAR_MODEL_NAME_SPARK = "SPARK";
// 3 ) 차량 색상 정보를 정수로 저장하는 상수 선언
public static final int COLOR_PERPECT_BLACK = 0X000001;
public static final int COLOR_CREAM_WHITE = 0XFFFFCC;
public static final int COLOR_VARCELONA_RED = 0XFF0000;
// Getter & Setter 메서드
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
public String getCarModelName() {
return carModelName;
}
public void setCarModelName(String carModeName) {
this.carModelName = carModeName;
}
public int getColor() {
return color;
}
public void setColor(int color) {
this.color = color;
}
}
– 특정 클래스 내에서 사용되는 데이터를 상수로 제공하면,
문자열의 오타나 정수형 파라미터 사용 시 등의 다양한 어려움에서 오는 문제점을 해결할 수 있음.
→ 주로 상수는 public static final 키워드 사용.
public에 의해 어디서든 접근이 가능하며,
static에 의해 클래스명만으로 인스턴스 생성없이 접근 가능하고,
final에 의해 데이터가 변경되지 않음.
⇒ 상수의 이름은 명확하게 지정함으로써, 복잡한 데이터도 이름만으로 단순히 사용이 가능하게 됨.
• main 메서드에서 실행
// 인스턴스 생성
CarInfoWithConstant ci2 = new CarInfoWithConstant();
ci2.setCompany(CarInfoWithConstant.COMPANY_HYUNDAI); // 제조사
ci2.setCarModelName(CarInfoWithConstant.CAR_MODEL_NAME_SONATA); // 모델명
ci2.setColor(CarInfoWithConstant.COLOR_PERPECT_BLACK); // 색상
if(ci2.getCompany() == CarInfoWithConstant.COMPANY_HYUNDAI) {
System.out.println("현대자동차 입니다.");
}else {
System.out.println("현대자동차가 아닙니다.");
}
코드 분석
4~6 | – set 메서드를 호출하여 값을 저장할 때 직접 입력하지 않고, 클래스명.상수명을 통해 상수를 불러와서 지정 가능하므로, 잘못된 데이터를 저장할 확률이 낮아짐. |
8~12 | – 값을 비교할 때도 상수명만으로 비교하면 되므로 오류 발생 확률 없음. |
✓ 실행 결과
현대자동차가 아닙니다.
• 상수 활용의 예
Calendar cal = Calendar.getInstance();
System.out.println("올해는 몇 년도? " + cal.get(Calendar.YEAR));
– Calendar 클래스를 사용하여 날짜 정보를 관리할 때,
Calendar 클래스의 get() 메서드를 통해 연도, 월, 일 등의 정보를 가져와야 하는데,
항목을 지정할 때 Calendar 클래스에서 제공하는 상수를 통해 지정.
✓ 실행 결과
올해는 몇 년도? 2023