blues_log

오늘 배운 내용

  • Java : 인터페이스, 다형성

새로 알게된 내용

 

1. 인터페이스

  • 인터페이스는 추상과 final과 비슷하게 규제를 한다.
  • 어떤 객체가 있고 그 객체가 특정한 인터페이스를 사용 → 그 객체는 반드시 인터페이스의 메소드들을 구현해야 함
  • 만약, 인터페이스가 강제하는 메소드를 구현하지 않으면 에플리케이션은 컴파일도 안된다.

인터 페이스의 예

 

interface I{
	public void z();
}

class A implements I {  //A는 I라는 인터페이스를 구현한다.
	public void z() {}  //빈로직이어도 메소드를 반드시 구현해야한다!!
}

 

  • 하나의 클래스가 여러 인터페이스를 구현할 수 있다.
interface I1{
    public void x();
}
 
interface I2{
    public void z();
}
 
class A implements I1, I2{ //A는 I1,I2를 구현한다.
    public void x(){}  
    public void z(){}  //I1,I2에 정의된 메소드를 반드시 구현해야한다.
}

 

  • 인터페이스도 상속이 된다.
interface I3{
    public void x();
}
 
interface I4 extends I3{  //I4는 I3를 상속한다.
    public void z();
}
 
class B implements I4{ //B는 I4를 구현한다.
    public void x(){} 
    public void z(){}  //B에서 I4에 상속된 I3의 메소드도 반드시 구현해야한다.  
}

 

  • 인터페이스의 멤버의 접근 제어자는 반드시 public이어야 한다.

 

2. 다형성

  • 하나의 메소드나 클래스가 있을 때 이것들이 다양한 방법으로 동작하는 것을 의미한다.
  • 메소드에서의 다형성의 대표적인 예는 '오버로딩'이다.
class O{
    public void a(int param){
        System.out.println("숫자출력");
        System.out.println(param);
    }
    public void a(String param){
        System.out.println("문자출력");
        System.out.println(param);
    }
}
public class PolymorphismOverloadingDemo {
    public static void main(String[] args) {
        O o = new O();
        o.a(1);  // 결과 : 숫자출력/1
        o.a("one"); //결과 : 문자출력/one
    }
}

여기서 a메소드는 a라는 같은 이름을 공유하지만 서로 다른 동작 방법을 갖고있다 !

 

  • 클래스에서의 다형성의 대표적인 예는 오버라이딩이다.
class A{
    public String x(){return "x";}
}
class B extends A{
    public String y(){return "y";}
}
public class C {
    public static void main(String[] args) {
        A obj = new B(); //obj는 A의 데이터타입을 갖는다. 즉, 클래스 B가 클래스 A화 되었다.
        obj.x(); //결과 : x
        obj.y(); //y메소드는 A클래스에 정의되어 있이 않아서 실행이 되지 않는다.
    }
}

 

class A{
    public String x(){return "A.x";}
}
class B extends A{ //B는 A를 상속
    public String x(){return "B.x";} //x메소드 오버라이딩
    public String y(){return "y";}
}
class B2 extends A{ //B2는 A를 상속
    public String x(){return "B2.x";} //x메소드 오버라이딩
}
public class C {
    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
    }
}

느낀점

 

아직 Java에 대한 기초도 확실하지 않은데 뭔가 마음이 급한 것 같다.

 

기본 개념은 늘 중요하다 ! 우선, Java기초 이론을 끝내자. 마음을 급하게 먹지 않는 것이 중요한 것 같다 ! 

'TIL&WIL' 카테고리의 다른 글

2023-04-27 TIL (Java : Object, enum)  (0) 2023.04.27
2023-04-26 TIL (Java : 예외)  (0) 2023.04.26
2023-04-24 TIL (Java : 추상, final)  (0) 2023.04.24
2023-04-18 TIL (Java : Overriding, Overloading)  (0) 2023.04.18
2023-04-17 TIL (SQL)  (0) 2023.04.17