추상 클래스와 추상 메소드에 대해 알아보겠습니다.
추상 클래스와 추상 메소드는 각각 클래스와 메소드 앞에 abstract를 붙여주면 됩니다.
그렇다면 추상 클래스와 추상 메소드를 왜 쓸까요?
추상 클래스를 쓰는 이유
1. 더 이상 객체를 생성하고 싶지 않을 때
-> 클래스 앞에 abstract를 붙여주게 되면 객체를 생성할 수 없습니다. 따라서 처음부터 객체를 생성하지 않는 클래스를 만들거나 어느 회사에서 더 이상 고객을 받지 않을 때 같은 경우에 클래스 앞에 abstract 를 붙여줍니다.
2. 두개의 서로 다른 클래스를 만들어야 하는데 두 클래스에 겹치는 내용이 많을 때 겹치는 내용을 추상 클래스로 생성하고 두개의 서로 다른 클래스에서 이 추상 클래스를 상속
-> 비슷한 내용을 가지는 두 클래스를 만들면 겹치는 내용을 두번 작성하고 내용이 수정되면 두 클래스 모두 수정해줘야 하지만 겹치는 내용을 추상 클래스로 생성하고 두 클래스에서 상속한다면 겹치는 내용을 상속받아 기능 구현이 쉬워지고 수정에도 용이하다.
추상 메소드
추상 메소드를 사용하는 이유는 추상 클래스를 사용하는 이유 2번과 유사합니다. 서로 다른 두 클래스에서 비슷한 기능을 추가해야하는 경우입니다.
예를 들면 두 클래스에서 똑같은 내용의 메세지를 각각 문자를 보내야하는 기능과 메일을 보내야 하는 기능을 추가해야 한다면 물론 따로 구현할 수 있지만 추상 메소드를 사용해서 구현하는 것이 나중에 사용하기 더 편합니다.
추상 메소드를 사용하는 방법은 상속 되어지는 슈퍼 클래스의 내용이 없는 추상 메소드를 생성합니다. 그리고 서로 다른 두 클래스에서 슈퍼 클래스를 상속해서 각각 추상 메소드를 오버라이딩 해서 재정의 합면 됩니다.
2번의 경우에서 비슷하지만 다른 기능구현이 필요한 경우(ex. 문자를 보낸다, 메일을 보낸다)에 추상 메소드를 사용하게 됩니다.
추상 메소드를 사용하는 목적은
1. 서브 클래스에서 이 메소드의 기능을 반드시 구현하도록 만들기 위해
2. 다형성(polymorphism)
** 다형성 : 슈퍼클래스 변수에 서브클래스들의 객체를 넣을 수 있다. 이렇게 하나의 변수에 여러 종류의 데이터를 대입할 수 있는 성질을 변수의 다형성이라고한다.
Object배열을 선언해서 여러가지 다른 객체를 넣을 수 있는 것이 다형성의 예 입니다.
파라미터로 슈퍼클래스형 객체로 받아도 다 받아짐
다형성을 통해 메소드 오버라이딩이 가능 -> 객체를 파라미터로 받아서 각각의 객체에 기능이 비슷하고 이름이 같은 메소드를 호출해서 실행
** 클래스 변수의 다형성을 사용할 때 주의점
슈퍼 클래스의 추상 메소드가 없으면 컴파일 에러가 난다.
JVM은 객체의 메소드를 호출할 때 변수의 타입에 상관없이 객체가 속하는 클래스의 메소드를 호출한다. 하지만 java 컴파일러는 객체가아니라 변수의 타입만으로 그 메소드가 있는지 없는지 체크한다.
슈퍼클래스의 메소드를 호출해서 컴파일러를 통과하고 실행될 때는 서브클래스의 메소드가 호출되도록 하는것이 추상메소드의 사용목적 2번입니다.
'Com > Java' 카테고리의 다른 글
[Java] 추상 메소드, 다형성 예제 / Abstract Method, polymorphism 예제 (0) | 2013.08.09 |
---|---|
[Java] final 기능 (0) | 2013.08.05 |
[Java] 클래스의 정적 필드 / 정적 메소드 / Static Field / Static Method (0) | 2013.08.05 |
[Java] Overriding / 오버라이딩 / Overloading / 오버로딩 (0) | 2013.08.05 |
[Java] Exception 처리 (0) | 2013.08.05 |