[JAVA] 자료구조(abstract, final)
l final
final - 마지막의, 변경될 수 없는
final은 '마지막의' 또는 '변경될 수 없는'의 의미를 가지고 있으며 거의 모든 대상에 사용될 수 있다.
변수에 사용되면 값을 변경할 수 없는 상수가 되며, 메서드에 사용되면 오버라이딩을 할 수 없게 되고 클래스에 사용되면 자신을 확장하는 자손클래스를 정의하지 못하게 된다.
final이 사용될 수 있는 곳 - 클래스, 메서드, 멤버변수, 지역변수
제어자 |
대상 |
의미 |
final |
클래스 |
변경될 수 없는 클래스, 확장될 수 없는 클래스가 된다. 그래서, final로 지정된 클래스는 다른 클래스의 조상이 될 수 없다. |
매서드 |
변경될 수 없는 매서드. Final로 지정된 매서드는 오버라이딩을 통해 재정의 될 수 없다. |
|
맴버변수 |
변수 앞에 final이 붙으면, 값을 변경할 수 없는 상수가 된다. |
|
지역변수 |
l abstract
추상클래스란?
추상클래스(abstract class)는 추상적인 클래스로써 그 구현이 덜 되었거나 또는 아직은 미완성 클래스이므로 실제 인스턴스(또는 객체)를 생성할 수 없도록 한 클래스입니다. 다시 말해서, 추상클래스는 객체가 가지는 특성들을 추상화시켜 놓았을 뿐 아직 구체화 시키지 못한 클래스이므로, 이 추상클래스를 상속하는 하위클래스에서 좀 더 구체화 시키도록 하는 것입니다.
따라서, 추상클래스를 상위클래스로 하여 상속하는 하위클래스는 추상클래스인 상위클래스에서 완전히 구현하지 못한 부분들을 완전하게 구현해 주어야만 하위클래스에 대한 객체 생성이 가능하고, 그렇지 못할 경우 하위클래스는 상위클래스인 추상클래스와 같이 미완성이므로 자체적으로 객체를 생성할 수 없고, 이 하위클래스는 다시 추상클래스가 됩니다.
추상메소드는 추상클래스와 마찬가지로 아직 구현이 이루어지지 않고 단지 그 프로토타입만을 가지고 있는 메소드를 말합니다.
추상메소드는 미완성 메소드이어야 하므로, 메소드의 몸체(body)를 가질 수 없습니다. 추상메소드는 클래스가 가져야 할 인터페이스에 대한 프로토타입(메소드의 형태)을 정의하고 있습니다. 추상메소드는 하위클래스가 가져야 할 인터페이스를 정의합니다. 추상메소드를 포함하는 클래스는 반드시 추상클래스로 선언되어야 합니다.
추상클래스는 추상메소드를 포함할 수 있고, 추상메소드를 포함하는 클래스는 반드시 추상클래스로 선언되어야 합니다. 추상메소드를 포함하고 있는 추상클래스를 상속하는 하위클래스는 추상클래스가 갖고 있는 모든 추상메소드를 구현하여 주어야 합니다. 그럴 경우, 하위클래스는 하나의 클래스처럼 사용할 수 있고, 인스턴스의 생성도 가능하지만, 추상메소드를 모두 구현해 주지 못한 경우에는 하위클래스도 구현이 완전히 이루어지지 않은 추상메소드를 포함하게 되므로 추상클래스가 되며,
이 때 반드시 추상클래스로 선언되어야 합니다. 그렇지 않을 경우 다음과 같은 에러가 발생합니다. 이러한 추상 클래스(abstract class)와 추상 메소드는 해당 클래스와 메소드의 앞에 abstract 키워드를 사용하여 선언할 수 있습니다.