반응형
4. 추상화
추상화란 공통의 속성이나 기능을 묶어 이름을 붙이는 것을 말한다. 예를 들어 걷는다, 뛴다, 달린다, 날라간다라는 기능들을 "움직인다"라는 고통의 속성으로 묶어서 추상화할 수 있다. 객체중심의 안정된 모델을 구축하고, 현실세계를 자연스럽게 표현할 수 있다는 장점이 있다.
1)추상메서드 : 내용이 없는 메서드, 구현은 하지 않고 선언만한다. 메서드의 내용이 너무 일반적인 내용이라서 부모 클래스에서 구체화하여 정의할 필요가 없는 경우, 추상 메서드로 선언만하고 상속받은 자식 클래스에서 재정의하도록 할 때 사용한다.
2)추상클래스 : 한 개 이상의 추상 메서드를 포함하는 클래스를 말한다. 일반클래스는 세부적이고 구체적인 것에 반해서 추상클래스는 구체적이지 않고 추상적이다. 추상메서드는 선언만되고 구현이 되지 않는 불완전한 메서드이므로 객체로 생성되어서는 안된다. 따라서 이런 추상메서드를 포함한 클래스는 추상클래스로 선언해서 객체 생성을 금지한다. 그리고 추상메서드를 재정의하지 않을 경우에는 컴파일러는 에러를 발생시킨다. 그러므로 꼭 추상메서드는 재정의 되어야한다.
3)인터페이스 : 인터페이스는 추상클래스와 비슷한 기능을 하지만 극단적인 경우다. 추상메서드와 상수로만 이뤄져있다. 인터페이스는 다중 상속이 가능하다는 장점이 있다.
4) 추상클래스와 인터페이스 공통점과 차이점
자바언어의 기준에 의한 공통점과 차이점을 두고 있다.
[예제코드]
1)추상클래스와 인터페이스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | abstract public class Animal { int age; Animal(){ this .age = 10 ; } public int getAge() { //일반 메서드선언 가능 return age; } abstract public void bark(); //추상메서드 선언만하고 구현은 안함 } public interface food { public void eat(); //선언만한다. } public class Cat extends Animal implements food { Cat(){} @Override public void bark() { System.out.println( "야옹야옹" ); } @Override public void eat() { System.out.println( "생선좋아" ); } } public class Dog extends Animal implements food{ Dog(){} @Override public void bark() { System.out.println( "멍멍" ); } @Override public void eat() { System.out.println( "사료주세요" ); } } public class Tiger extends Animal implements food { Tiger(){ } @Override public void bark() { System.out.println( "어흥어흥" ); } @Override public void eat() { System.out.println( "고기주세요" ); } } public class Main { public static void main(String[] args) { Animal animal = new Animal(); //추상클래스는 객체를 생성할 수 없다. 오류 Cat cat = new Cat(); Dog dog = new Dog(); Tiger tiger = new Tiger(); //추상메소드 호출 cat.bark(); dog.bark(); tiger.bark(); //인터페이스 메소드호출 cat.eat(); dog.eat(); tiger.eat(); } } |
반응형
'객체지향' 카테고리의 다른 글
[디자인패턴]StrategyPattern (0) | 2022.03.27 |
---|---|
Exception (0) | 2021.06.01 |
객체지향 알아 둘 것 (0) | 2018.03.27 |
포인터와 참조 (0) | 2018.03.27 |
가상소멸자 (0) | 2018.03.27 |