동적바인딩과 추상화

김인범's avatar
Nov 14, 2024
동적바인딩과 추상화

동적 바인딩

다형성을 실현하기 위한 중요한 매커니즘
다양한 형태의 객체를 하나의 인터페이스로 다룰 수 있게 하여 코드의 유연성과 확장성을 높이는 것을 목표로 한다.
 

추상화

공통적인 특징을 뽑아내어 상위 개념을 만들어내는 것
개별적인 구현을 드러내지 않고도 상위 개념을 통해 공통된 동작이나 속성을 다룰 수 있게 한다 코드의 복잡성 감소, 재사용성 증가, 유연성 향상 의 장점이 있다.
 

코드 예시

1. Animal (Cat 과 Mouse 의 상위클래스)

public abstract class Animal { public abstract String getName(); }

2. Cat (Animal의 하위 클래스)

public class Cat extends Animal { private String name = "고양이"; public String getName() { return name; } }

3. Mouse (Animal의 하위 클래스)

public class Mouse extends Animal { private String name = "쥐"; public String getName() { return name; } }
 
Cat과 Mouse라는 구체적인 오브젝트(Object)들을 상위개념인 Animal(추상적 오브젝트)에 넣었다.
== 추상화
 

4. Doorman 오브젝트 추가

public class Doorman { static Doorman instance = new Doorman(); private Doorman() { } public void 쫒아내(Animal animal){ System.out.println(animal.getName() + " 쫒아내"); } }
Doorman이 가지고 있는 메서드 “쫒아내()”는 Cat과 Mouse의 상위 개념인 Animal 을 매개변수로 받고 있다.
 

5. main 클래스

public class App { public static void main(String[] args) { Doorman doorman = Doorman.instance; Cat cat = new Cat(); Mouse mouse = new Mouse(); doorman.쫒아내(cat); doorman.쫒아내(mouse); } }
 

6. 정리

doorman의 메서드 “쫒아내()”는 Animal을 매개변수로 받아내고 있기 때문에 하위 개념인 cat과 mouse가 들어가도 정상적으로 실행된다. (유연성)
만약 추가적인 동물 (예시: 강아지 dog)가 추가된다면 dog 클래스가 Animal클래스의 하위개념이란 것을 명시한다면 doorman.쫒아내() 가 받아들일 수 있는 객체가 간단하게 늘어날 수 있다. (확장성)
doorman.쫒아내 가 Animal에 속하는 하위 개념들을 받아낼 수 있게 되고 늘어난 하위 개념들을 통해 사용될 기회가 많아졌기 때문에 추상화가 이루어졌다고 이해했다.
 
Share article

taker