자바에서의 모든 객체는 부모클래스형 참조 변수나 구현한 인터페이스 변수에 담을수 있다.
이 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("안녕하세요.!");
}
}
--> 학습정리
다형성 개념을 사용하면 클래스가 변경되었을 떄 참조 변수 선언 부분은 수정하지 않아도 되지만
객체를 생성하는 부분의 코드는 변경되어야 한다.
'웹 프로그래밍(풀스택-->java) > 웹프로그래밍(백엔드-->java)' 카테고리의 다른 글
51. IoC 컨테이너 (0) | 2021.12.17 |
---|---|
50. 스프링 프레임 워크 사용하기 (0) | 2021.12.17 |
48. 자바 프로젝트 만들기 (0) | 2021.12.16 |
47. SpringFramework 소개 (0) | 2021.12.15 |
46. Jsp 중고급 - 서블릿 활용2 - 파라미터 사용 (0) | 2021.12.12 |