본문 바로가기
웹 프로그래밍(풀스택-->java)/웹프로그래밍(백엔드-->java)

49. 다형성 사용하기

by 백엔드개발자0107 2021. 12. 16.

자바에서의 모든 객체는 부모클래스형 참조 변수나 구현한 인터페이스 변수에 담을수 있다.

 

 

이 HelloWorldEn이라는 클래스는 HelloWorld라는 인터페이스를 구현하고 있다.

 

HelloWorld인터페이스가 sayHello()메소드를 가지고 있다면

 

HelloWorldEn클래스가 HelloWorld인터페이스를 상속받을때 반드시 sayHello()를 구현을 해야만 한다.

 

자바의미해석

더보기

class HelloWorldEn implements HelloWorld

--> 클래스 HelloWorldEn은 클래스 HelloWorld를 구현한다.

"--> 클래스 HelloWorldEn은 클래스 HelloWorld를 구현한다."이 말 그대로 클래스 HelloWorldEn은 클래스 HelloWorld를 구현한다는 의미 그대로, HelloWorld클래스 내의 sayHello()를 사용할수 있게 된다.

 

 

클래스가 변경되었을 경우 , 클래스를 가지고 객체를 생성하는 부분만 변경이 되고, 코드를 변경할 필요가 없게 된다. 이렇게 사용하는 방법,및 패턴을 다형성이라고 한다.


팁: static 은 어떤때에 쓰이나?

 

static 은 정적참조이다. 

즉 객체같은경우는 heap이라는 다른 공간에 저장(메모리사용안함)이되고

 

static이 쓰인 변수나 메소드는 또 static공간이 따로 있어서 거기서 메모리를 사용한다. (너무 static을 남발하면 메모리손상으로 성능 악영향)

 

그렇기 때문에 일반클래스에 선언한 static 메소드를 사용할려면 똑같이 그 일반클래스도 static을 적어주어야만한다.


MainClass.java

package kr.co.softcampus.main;

import kr.co.softcampus.beans.HelloWorld;
import kr.co.softcampus.beans.HelloWorldEn;

public class MainClass {

	public static void main(String[] args) {
		HelloWorld hello1 = new HelloWorldEn(); // new HelloWorldKo()
		callMethod(hello1);

		HelloWorld hello2 = new HelloWorldEn(); // new HelloWorldKo()
		callMethod(hello2);
	}

	public static void callMethod(HelloWorld hello) {
		hello.sayHello();
	}

}

 

HelloWorldEn.java

 

package kr.co.softcampus.beans;

public class HelloWorldEn implements HelloWorld {

	//반드시 HelloWorld클래스에 있는 sayHello()메소드를 오버라이딩 해야만 한다.
	
	@Override
	public void sayHello() {
		// TODO Auto-generated method stub
		System.out.println("HI~~~~");
		
	}
	
	
}

 

HelloWorldKo.java

 

package kr.co.softcampus.beans;

public class HelloWorldKo implements HelloWorld {

	public void sayHello() {
		
		System.out.println("안녕하세요.!");
		
	}
	
	
}

 

--> 학습정리

다형성 개념을 사용하면 클래스가 변경되었을 떄 참조 변수 선언 부분은 수정하지 않아도 되지만

 

객체를 생성하는 부분의 코드는 변경되어야 한다.