본문 바로가기
Thoughts & Opinions

2023.04.20 TIL

by seunghyeok lee 2023. 4. 20.

오늘 하루는 java랑 js 위주로 공부하였습니다.

하지만 java를 중점으로 공부하고 있어서 오늘도 TIL에 java 관련 기록을 남기겠습니다.

Java

인터페이스 구현

  • 인터페이스는 자신에 정의 된 추상메서드의 몸통을 만들어주는 클래스를 작성해야 한다.
    • 클래스는 extends 키워드를 사용했지만 인터페이스는 implements를 사용해야 한다.
  • 오버라이딩 : 조상의 메서드보다 넓은 범위의 접근 제어자를 지정해야 하는 것
  • 인터페이스를 이용한 다형성
    • 인터페이스 역시 구현한 클래스의 조상
    • 즉 해당 인터페이스 타입의 참조변수로 이를 구현한 클래스의 인스턴스를 참조할 수 있다.
    • 그리고 인스턴스타입의 매개변수를 가질 수 있다.
      • 메서드 호출 시 해당 인터페이스를 구현한 클래스의 인스턴스를 매개변수로 제공해야 한다는 것을 의미
    • 리턴값이 인터페이스 타입일 수 있다.
      • 리턴타입이 인터페이스라는 것은 매서드가 해당 인터페이스를 구현한 클래스의 인스턴스를 반환한다는 것을 의미!
  • 매개변수를 통해 인터페이스를 구현한 클래스의 인스턴스를 동적으로 제공받는 경우
interface I {
  public abstract void methodB();
}

class A {
	public void methodA(I i){
    i.methodB();  
  }
}

class B implements I {
  public void methodB(){
    System.out.println("methodB in B class");
  }
}

 

  • 제3의 클래스를 통하여 인터페이스를 구현한 클래스의 인스턴스를 얻는 경우
interface I {
	public abstract void methodB();
}

class A {
  public void methodA(){
    I i = InstanceManger.getInstance();
    i.methodB();
  }
}

class B implements I {
  public void methodB(){
    System.out.println("methodB in B class");
  }
}

class InstanceManger {
  public static I getInstance(){
    return new B();
  }
}

 

디폴트 메서드와 static 메서드

JDK 1.8 이후 interface에 허용된다.

내부 클래스 inner class

  • static class 만 static 변수를 가질 수 있다.
  • final static은 상수이므로 모든 내부 클래스에서 사용할 수 있다.
  • 내부 클래스는 외부 클래스의 멤버와 같이 간주된다. 즉 규칙도 똑같이 적용된다.
  • 지역 클래스가 포함된 메서드에 정의된 지역변수도 사용할 수 있다. 단, final 이 붙은 지역 클래스가 포함된 메서드에 정의된 지역변수도 사용할 수 있다. 단, final이 붙은 지역변수만 접근 가능
    • 지역변수가 소멸된 시점에 지역 클래스의 인스턴스가 해당 지역변수를 참조하는 경우가 있음…
  • 내부 클래스와 외부 클래스에 선언된 변수 이름이 같을 경우 변수 앞에 this 또는 외부 클래스명. this를 붙여 구별할 수 있다.
  • 익명 클래스
    • 클래스 선언과 객체 생성을 동시에 동작함 → 일회용 클래스
    • 오로지 단 하나의 클래스를 상속받거나 단 하나의 인터페이스만 구현할 수 있다.
    • 클래스 명이 없음 → 컴파일 시 : 외부 클래스명$숫자. class
    new Parent() {
      // member 선언
    }
    
    new Interface() {
      // memeber 선언
    }
    

학습자료 : https://github.com/seunghyeokleeme/java-study/commit/21de29eb2d72b303416ab8c7733804e411e21cc1

 

ch07 학습 완료 · seunghyeokleeme/java-study@21de29e

Show file tree Showing 15 changed files with 456 additions and 0 deletions.

github.com

 

 

댓글