[ java ] in KIDS 글 쓴 이(By): Noryae (solo wolf) 날 짜 (Date): 1998년03월20일(금) 17시06분04초 ROK 제 목(Title): Re: abstract. 매우 어려운 질문이라 그냥 지나치려고 했는데.. 촤~~밍(?)이라고 하시니... :p 추상화의 개념 자체가 광범위하고 추상적이다 보니 그거 가 커버하려면 책 한권 써야 하지 않을까...쩝. 간단히 Java에서 abstract 키워드의 사용법만 아는데로 말씀드리죠. abstract를 method의 specifiation에 쓸 수 있는데 이 경우 method의 body를 정의하지 않습니다: class Animal { public abstract String livesIn(); } 이렇게 선언하면 Animal이란 클래스는 추상클래스가 됩니다. 즉, instance를 가질 수 없고 구체화된 클래스(specialized class)에서만 instance를 가질 수 있게 됩니다. Specialized class란 abstract class의 상반되는 개념으로 abstract class에서 선언한 abstract method의 실제 body를 제공하는 클래스입니다. class Monkey extends Animal { public String livesIn() { return "trees"; } } class Penguin extends Animal { public String livesIn() { return "ice"; } } 위에서 Monkey와 Penguin은 Animal의 specialized class가 되는 겁니다. 그러니까 추상화의 개념은 구체적인 것들을 일반화시키는 것이죠. livesIn이란 method는 동물이면 누구나 가질 수 있는 성질이죠. 근데 동물의 livesIn에서 return하는 value는 livesIn이 추상적이기 때문에 어떤 특정한 값이 있을 수 없죠. 반면 원숭이나 펭귄은 특정한 동물들이기 때문에 어디 사는지 알 수 있죠. 위의 예는 좀 간단한 예이고, 만약 livesIn이란 method를 더 광범위하게 제공하고 싶다. 예를 들어서... 꼭 동물만 사냐? 모든 생물체는 다 사는 곳이 있지 안냐? 하고 반문할 수 있죠. 그럼 다음과 같이 정의할 수도 있습니다. interface AnyLivingBeing { public abstract String livesIn(); } class Monkey implements AnyLivingBeing { public String livesIn() { return "trees"; } } class Penguin implements AnyLivingBeing { public String livesIn() { return "ice"; } } class Bacteria implements AnyLivingBeing { public String livesIn() { return "dirty places"; } } .... 이렇게 선언하면 꼭 어떤 클래스로부터 subclass인 객체들에 한정되지 않죠. Java에서 interface는 기본적으로 abstract method들만 선언하는 타입이라고 보시면 됩니다. 그래서 abstract 키워드를 제외하고 써도 되죠. 두서 없이 설명했는데 이해가 가시는지... |