백엔드 언어2017. 6. 19. 21:59

다형성이란 하나의 메소드나 클래스가 있을 때 이것들이 다양한 방법으로 동작하는 것을 의미한다. 키보드의 키를 통하여 비유를 든다면 키보드의 키의 동작방법은 '누른다' 이다. 하지만 똑같은 동작 방법의 키라고 하더라도 ESC는 취소를 ENTER는 실행의 목적을 가지고 있다. 다형성이란 동일한 조작방법으로 동작시키지만 동작을 다르게 하는 것이다.




class A{}

class B extends A{}

public class PolymorphismDemo1 {

public static void main(String[] args) {

A obj = new B();

}

}


위의 코드는 A형태의 객체 obj를 만들고 이 객체의 동작은 B로 하는것이다.



class A{

public String x(){return "x";}

}

class B extends A{

public String y(){return "y";}

}

public class PolymorphismDemo1 {

public static void main(String[] args) {

A obj = new B();

obj.x();

obj.y();

}

}


위의 코드에서 obj.x();는 실행이 되지만 obj.y();는 실행이 되지 않는다.

클래스 A에 x()라는 메소드가 없기 때문이다.


즉 클래스 B의 데이터 형을 클래스 A로 하면 클래스 B는 마치 클래스 A인것처럼 동작하게 되는 것이다. 클래스 B를 사용하는 입장에서는 클래스 B를 클래스 A인것처럼 사용하면 된다.


class A{

public String x(){return "A.x";}

}

class B extends A{

public String x(){return "B.x";}

}

public class PolymorphismDemo1 {

public static void main(String[] args) {

A obj = new B();

System.out.println(obj.x());

}

}


위의 코드의 결과는 'B.x' 이다.

A의 동작은 "A.x" 이지만 B클래스에 정의된 메소드 x()가 실행된다.


class A{

public String x(){return "A.x";}

}

class B extends A{

public String x(){return "B.x";}

}

class B2 extends A{

public String x(){return "B2.x";}

}

public class PolymorphismDemo1 {

public static void main(String[] args) {

A obj = new B();

A obj2 = new B2();

System.out.println(obj.x()); // 출력결과 B.x

System.out.println(obj2.x()); // 출력결과 B2.x

}

}


다형성을 통하여 동작방법은 똑같지만 동작을 다르게 설정할 수 있다.

그리고 다른 동작의 클래스는 new B(); 또는 new B2(); 이부분에 있다.

'백엔드 언어' 카테고리의 다른 글

JSP DB연동 테스트  (0) 2017.06.20
DAO(Data Access Object) 패턴  (0) 2017.06.19
자바 웹 개발자의 학습 로드맵  (0) 2017.06.18
템플릿 언더바 기본 (Template Underscore)  (0) 2017.03.24
JSTL 사용법  (0) 2017.03.24
Posted by EL2A