반응형
학교에서 Java 강의를 하기위해 강의자료를 만들던중...
과거에 제대로된 예제가 없어서 확실히 이해하지 못했던 Abstract Class에 대해서 알아보게되었다.
이리저리 좋은예제가없나 해서 이책저책 뒤지다가 좋은 예제를발견하게되어 한번 정리를 하고 넘어가도록 하겠다.
이런기회에 정리하지 않으면 안될듯하다.
[1] Abstract 란?
한국말로 표현하면 "추상화"라는 단어로 말할 수있다. 과연 추상화란 무엇인가? 아주 두리뭉실한 단어이지만, 좀 쉽게 설명해보도록 하겠다. 추상화란 어떠한 구체적인 개념으로부터 공통된 부분들만 추려내어 일반화 할 수 있도록 하는 것을 의미한다.
ㅎㅎ 적고나니 더 어렵다.ㅎㅎㅎ 뒤에 예제를 보면 쉽게 이해가 갈테이 정의는 여기서 접도록 하겠다.
[2] Abstract 메소드란?
추상화를 언급하기위해 추상메소드 부터 이해해 보도록 하자. 추상메소드란, 메소드 뒤의 {} 중괄호를 생략하여, 사실상 body즉, 내용이없는 메소드를 의미한다. 어찌보면 C언어의 header를 선언하는것과 같은 형태를 지닌다.
아래 형태를 잘 기억해 두길 바란다.
[3] 추상 클래스란?
추상클래스의 정의는 아주쉽다. 걍~ 추상메소드가 1개이상 들어가 있으면, 무조건적으로 추상클래스 라고 부른다. ㅋ
아래 예제를 통해 추상클래스의 형태를 살펴 보도록 하자.
위 예제에서 보듯이 다른거 없다.aaa()라는 구현된 메소드가 있긴 하지만, testEX()라는 추상메소드가 있기 때문에 이 클래스는 추상클래스 라고 부르는 것이다. ㅋ
[4] 추상클래스는 과연 어디다가 써먹는 것인가?
이 글을 쓰게된 이유다... 학생들에게 강의시 예제를 넣어주어야 하는데 어떤걸 할지 고민많이했다 ㅋㅋ 바로 스타크래프트를 예제로 드는것이다. 아래 그림을 보라.
위 그림은 간단한 클래스 다이어그램이다. 즉 Unit이 라는 클래스가 있고 Terran, Zero, Protoss 의 3개의 클래스는 Unit 클래스를 상속받고 있는 그림이다.
잘보면 decEnerge()라는 메소드가 보일것이다. 이 메소드를 보니, 모두 동일한것들이 하위 3개의 클래스에 선언되어있다. 여기까지 애기했으면 머리좋은 놈들은 바로 알것이다. 각 종족별로 때렸을때 데미지는 틀리다. 그 데미지를 깍는 메소드가 바로 decEneger()이다. 서로다른 데미지 타격을 각각의 클래스마다 선언 후 구현하는것보다 Body가 없는 Unit의 decEnerge()를 상속받아 각각 오버라이딩만 하게 되면, 아주쉽게 하나의 메소드로 구현가능하다.
만약 이런방식을 하지않는경우 각각의 클래스마다 데미지를 감소시키는 메소드명이 서로 달라, 추후 SM시 혼돈이 발생될 우려가 있기 때문에, 이런방식을 추천하는것이다.
[5] 최종 설명끝
소스를 별도로 붙이진 않겠다. 그건 쪽팔리는 일이다. 개념을 알고 접근하는 것이 중요하기 떄문이다. 요 예제는 참 좋은것같다.
특히 게임을 좋아하는 여러 학생들에게는 아주 좋은 예제인것같다. ㅎㅎㅎ 앞으로 요걸로 강의많이해야징 ㅋ
- 2010.09.16 랑이씀 -
과거에 제대로된 예제가 없어서 확실히 이해하지 못했던 Abstract Class에 대해서 알아보게되었다.
이리저리 좋은예제가없나 해서 이책저책 뒤지다가 좋은 예제를발견하게되어 한번 정리를 하고 넘어가도록 하겠다.
이런기회에 정리하지 않으면 안될듯하다.
[1] Abstract 란?
한국말로 표현하면 "추상화"라는 단어로 말할 수있다. 과연 추상화란 무엇인가? 아주 두리뭉실한 단어이지만, 좀 쉽게 설명해보도록 하겠다. 추상화란 어떠한 구체적인 개념으로부터 공통된 부분들만 추려내어 일반화 할 수 있도록 하는 것을 의미한다.
ㅎㅎ 적고나니 더 어렵다.ㅎㅎㅎ 뒤에 예제를 보면 쉽게 이해가 갈테이 정의는 여기서 접도록 하겠다.
[2] Abstract 메소드란?
추상화를 언급하기위해 추상메소드 부터 이해해 보도록 하자. 추상메소드란, 메소드 뒤의 {} 중괄호를 생략하여, 사실상 body즉, 내용이없는 메소드를 의미한다. 어찌보면 C언어의 header를 선언하는것과 같은 형태를 지닌다.
아래 형태를 잘 기억해 두길 바란다.
[접근제한] abstract class [클래스명] {} ex) public abstract class testEX(); |
[3] 추상 클래스란?
추상클래스의 정의는 아주쉽다. 걍~ 추상메소드가 1개이상 들어가 있으면, 무조건적으로 추상클래스 라고 부른다. ㅋ
아래 예제를 통해 추상클래스의 형태를 살펴 보도록 하자.
abstract class testClass{ public void aaa(){ System.out.println("aaa"); } public abstract class testEX(); } |
위 예제에서 보듯이 다른거 없다.aaa()라는 구현된 메소드가 있긴 하지만, testEX()라는 추상메소드가 있기 때문에 이 클래스는 추상클래스 라고 부르는 것이다. ㅋ
[4] 추상클래스는 과연 어디다가 써먹는 것인가?
이 글을 쓰게된 이유다... 학생들에게 강의시 예제를 넣어주어야 하는데 어떤걸 할지 고민많이했다 ㅋㅋ 바로 스타크래프트를 예제로 드는것이다. 아래 그림을 보라.
위 그림은 간단한 클래스 다이어그램이다. 즉 Unit이 라는 클래스가 있고 Terran, Zero, Protoss 의 3개의 클래스는 Unit 클래스를 상속받고 있는 그림이다.
잘보면 decEnerge()라는 메소드가 보일것이다. 이 메소드를 보니, 모두 동일한것들이 하위 3개의 클래스에 선언되어있다. 여기까지 애기했으면 머리좋은 놈들은 바로 알것이다. 각 종족별로 때렸을때 데미지는 틀리다. 그 데미지를 깍는 메소드가 바로 decEneger()이다. 서로다른 데미지 타격을 각각의 클래스마다 선언 후 구현하는것보다 Body가 없는 Unit의 decEnerge()를 상속받아 각각 오버라이딩만 하게 되면, 아주쉽게 하나의 메소드로 구현가능하다.
만약 이런방식을 하지않는경우 각각의 클래스마다 데미지를 감소시키는 메소드명이 서로 달라, 추후 SM시 혼돈이 발생될 우려가 있기 때문에, 이런방식을 추천하는것이다.
[5] 최종 설명끝
소스를 별도로 붙이진 않겠다. 그건 쪽팔리는 일이다. 개념을 알고 접근하는 것이 중요하기 떄문이다. 요 예제는 참 좋은것같다.
특히 게임을 좋아하는 여러 학생들에게는 아주 좋은 예제인것같다. ㅎㅎㅎ 앞으로 요걸로 강의많이해야징 ㅋ
- 2010.09.16 랑이씀 -
반응형
'Program > JAVA' 카테고리의 다른 글
[ Vector와 ArrayList의 차이점] (2) | 2010.11.22 |
---|---|
POJO(Plain Old Java Object) 란? (5) | 2010.11.05 |
JAVA에서 HashCode 값이 유일한가.? (0) | 2010.03.17 |
Spring 설정 방법 - UPDATE중 (0) | 2010.02.09 |
[ Factory Pattern ] (0) | 2010.02.07 |