김갱환
맨땅에 코딩
김갱환
전체 방문자
오늘
어제
  • 분류 전체보기 (239)
    • ⁂ 맨땅에 코딩 (11)
      • : Story (3)
      • : MiniProject 'MyWeb' (1)
      • : Final Project (5)
      • : Josa-Moa 한국어 조사 처리 프로젝트 (1)
    • —————Frontend——————————————.. (0)
    • ⁂ HTML (10)
      • : 기본 익히기 (10)
    • ⁂ CSS (15)
      • : 기본 익히기 (15)
    • ⁂ Java Script (32)
      • : 기본 익히기 (28)
      • : 자바스크립트 라이브러리 (1)
      • : 연습 문제 (3)
    • ⁂ jQuery (11)
      • : 기본 익히기 (11)
    • ⁂ Bootstrap (3)
      • : 기본 익히기 (3)
    • ⁂ TailWind CSS (1)
    • ⁂ AJAX (5)
      • : 기본 익히기 (5)
    • ⁂ Vue.js (3)
      • : 기본 익히기 (3)
    • —————DB : Data Base————————.. (0)
    • ⁂ Oracle DB (27)
      • : 기본 익히기 (24)
      • : 연습 문제 (3)
    • ⁂ MyBatis Framework (15)
      • : 기본 익히기 (15)
    • —————Backend———————————————.. (0)
    • ⁂ Java (62)
      • : 기본 익히기 (42)
      • : JDBC - Java DataBase Conn.. (4)
      • : Crawling (2)
      • : 독학으로 공부하기(과거) (11)
      • : 연습문제 (3)
    • ——————Web————————————————— (0)
    • ⁂ JSP (28)
      • : 기본 익히기 (28)
    • ⁂ Spring FrameWork (15)
      • : Legacy Project (1)
      • : 기본 익히기(Boot 기반) (14)
    • ——————————————————————— (0)
    • ⁂ Error Note (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 풀스택
  • web.xml수정
  • 코딩
  • http에러메세지
  • 코딩공부 #코딩 #자바 #자바독학 #자바공부 #개발자 #프론트앤드 #백앤드 #풀스택
  • HTML공부
  • ErrorPage
  • 백앤드
  • 개발자
  • 자바
  • 코딩 #코딩공부 #상수 #리터럴 #형변환 #개발자 #자바 #자바공부 #자바독학
  • 코딩 #코딩공부 #프론트앤드 #백앤드 #풀스택개발자
  • 객체지향프로그래밍
  • 프론트앤드
  • 자바공부
  • 코딩공부 #자바공부
  • 코딩공부
  • 비트연산자 #코딩공부 #자바공부 #코딩 #자바 #프로그래밍 #개발자
  • 연산자 #기본연산자 #코딩 #자바 #독학 #자바공부 #자바연산자
  • httperror

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
김갱환

맨땅에 코딩

⁂ Java/: 기본 익히기

[JAVA] #8-2 다형성(Polymorphism)

2022. 9. 15. 12:26

1. 다형성 이해해보기

 

 다형성(polymorphism)이란 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미한다.

 예를 들어 자동차가 타이어를 사용하는 방법은 동일하지만 어떤 타이어를 사용하는지에 따라 성능이 바뀐다.

 여기서 타이어를 부모 클래스, 그리고 타이어의 종류들을 각각 자식 클래스로 생각하면 된다.

 

 타이어 = new 금호 타이어

 타이어 = new 한국 타이어

 와 같은 모습인 것이다.

 

 자바에서는 이러한 다형성을 부모 클래스 타입의 참조 변수로 자식 클래스 타입의 인스턴스를 참조할 수 있도록 하여 구현하고 있다.

 다형성은 상속, 추상화와 더불어 객체 지향 프로그래밍을 구성하는 중요한 특징 중 하나다.

 

 이번엔 코드로 예를 들어보자.

class Parent { ... }

class Child extends Parent { ... }

...

Parent pa = new Parent(); // 허용
Child ch = new Child();   // 허용
Parent pc = new Child();  // 허용
Child cp = new Parent();  // 오류 발생.

 

 지금까지 우리는 클래스 타입이 같은 것들만 인스턴스를 생성해왔다(Parent pa = new Parent();와 같이).

 하지만 위의 코드 처럼 부모 클래스 타입의 참조변수가 자식 클래스 타입의 인스턴스를 참조할 수 있다.

 이것이 바로 다형성이다.

 (반대는 허용되지 않는다)

 

 이제 다형성을 이용해 객체를 생성하는 방법을 더 자세히 알아보자.

 

 

2. 다형성으로 객체 생성하기

 

클래스 코드

class Father{
	// 멤버변수 field
	public String name = "아버지";
	public String addr = "주소";
		
	// 생성자 함수 constructor
	public Father() {}
	public Father(String name, String addr) {
		this.name = name;
		this.addr = addr;
	} // end
	
	// 멤버함수 method
	public void disp() {
		System.out.println(this.name);
		System.out.println(this.addr);
	} // disp() end	
} // class end

class Son extends Father{
	public Son() {}
	public Son(String n, String a) {
		super.name=n;
		super.addr=a;
	} // end
} // class end

class Daughter extends Father{
	String friend="절친";	
	public Daughter() {}
	public Daughter(String n, String a) {
		super(n, a);
	} // end	
} // class end

 

 

1) 일반적인 방식으로 객체 생성하기

 일반적인 방식으로 객체를 생성한다는 것은 new 연산자를 사용한다는 뜻이다.

 이런 방식을 POJO(Plain Old Java Object) 방식이라 부른다.

 

Father fa = new Father();
fa.disp();

Son son = new Son("손흥민", "영국");
son.disp();

Daughter da = new Daughter("김연아", "한국");
da.disp();

 

2) 다형성을 이용해 객체 생성하기

 다형성은 위에서 설명했듯 자식 클래스는 부모 클래스에 대입이 가능하다는 개념이다.
 부모 클래스는 대입된 자식 클래스의 모양으로 스스로를 변환한다.

Father fa = new Son("개나리", "역삼동");
fa.disp();

fa = new Daughter("진달래", "서초동");
fa.disp();

System.out.println(fa.name);
System.out.println(fa.addr);
// 에러. 자식 클래스에서 추가된 멤버는 다형성의 대상이 아니다.
// System.out.println(fa.friend);

 

3) 부모 클래스를 자식 클래스에 대입하기

 부모 클래스도 자식 클래스에 대입 가능하다. 단 자식 클래스의 모양으로 형변환 해야 한다.

Father father = new Father();
Son son = new Son();

father=son;
son=(Son)father;	// Exception이 발생할 수도 있다

double a = 3.4;
int b = (int)a;		// 강제 형변환

// 예)
Object obj = new Integer(5);	// 다형성. 자식 클래스가 부모 클래스에 대입
System.out.println(obj);

Integer inte = (Integer)obj;	// 다형성
                                // 부모 클래스도 자식 클래스에 대입가능하지만
                                // 자식 클래스의 모습으로 변환해야 한다
System.out.println(inte);

obj=new Father();
System.out.println(obj.toString());

 

저작자표시 비영리 동일조건 (새창열림)

'⁂ Java > : 기본 익히기' 카테고리의 다른 글

[JAVA] #8-4 인터페이스(Interface)  (0) 2022.09.15
[JAVA] #8-3 추상(Abstract)  (0) 2022.09.15
[JAVA] #8-1 Super  (0) 2022.09.15
[JAVA] #7-3 Object와 toString()  (0) 2022.09.14
[JAVA] #7-2 Override  (0) 2022.09.14
    '⁂ Java/: 기본 익히기' 카테고리의 다른 글
    • [JAVA] #8-4 인터페이스(Interface)
    • [JAVA] #8-3 추상(Abstract)
    • [JAVA] #8-1 Super
    • [JAVA] #7-3 Object와 toString()
    김갱환
    김갱환
    코딩의 코자도 모르는 이의 공부 기록장

    티스토리툴바