728x90

final variable

 

값을 변경할 수 없으며 멤버변수에 초기화 값이 없을 시 (blank final), 생성자를 통해 초기화해야한다.

final 변수 이름은 모두 대문자를 쓰는 것이 기본 코딩스타일이다. (공백이나 단어구분시 언더스코어 _ 사용)

public class Ex {

	public static void main(String[] args) {
		FinalVariable f = new FinalVariable();
//		f.NUM1 = 10;
		f.num2 = 20;
		
		FinalVariable2 f2 = new FinalVariable2(100);
		FinalVariable2 f3 = new FinalVariable2(9098);
		
		System.out.println(f2.NUM1 + ", " + f2.NUM2);
		System.out.println(f3.NUM1 + ", " + f3.NUM2);
	}

}

class FinalVariable {
	final int NUM1 = 10;
	int num2 = 20;
	
	public void setNum() {
//		NUM1 = 99;
		num2 = 99;
	}
}

class FinalVariable2 {
	final int NUM1 = 30;
	final int NUM2;
	
	public FinalVariable2(int nUM2) {		
		NUM2 = nUM2;
	}
}

Output :

30, 100
30, 9098

 

 

final method

: 상속받은 메소드를 그대로 사용해야하며 오버라이딩이 금지된다

class FinalMethod {
	public void normalMethod() {
		
	}
	
	public final void finalMethod() {
		System.out.println("super class method");
	}
}

class SubFinalMethod extends FinalMethod {

	@Override
	public void normalMethod() { }	
	// Cannot override the final method from FinalMethod
//	public final void finalMethod() { }
}

 

final 클래스

: 클래스의 상속(is-a 관계)이 불가능하다.

final class FinalClass {

}

// The type subfinal cannot subclass the final class FinalClass
//class subfinal extends FinalClass {
//	
//}

: 대신 포함관계 (has-a)는 가능

final class FinalClass {
	public void method() {

	}
}

class SubFinalClass {
	FinalClass finalClass = new FinalClass();

	public void method() {
		finalClass.method();
	}
}

 

 

상수(Constant)

불변의 값. static final 키워드를 붙여서 표현
static 키워드에 의해 클래스명만으로 접근이 가능하며 모든 인스턴스가 하나의 값을 공유

class Car {
	private String company;    
	public static final String COMPANY_HYUNDAI = "HYUNDAI";
    
    public String getCompany() {
		return company;
	}
	public void setCompany(String company) {
		this.company = company;
	}
}

잘못된 값 입력확률을 줄이고 미리 정의된 값을 쉽게 가져다 쓸 수 있다.

public class Ex2 {
	public static void main(String[] args) {		
		Car car = new Car();		
		car.setCompany(Car.COMPANY_HYUNDAI);
		
		if(car.getCompany().equals(Car.COMPANY_HYUNDAI)) {
			System.out.println("현대자동차");
		} 
	}
}

상수는 생성자에서 초기화 될 수 없다. static은 인스턴스 생성전에 초기화되기 때문

+ Recent posts