다운캐스팅 

> 업캐스팅된 클래스를 다시 원래의 타입으로 형 변환하는 것으로 하위클래스로의 형변환은 명시적으로 해야함

   묵시적) 상위클래스명 name2 = new 하위클래스명();

   명시적) 하위클래스명 name1 = (하위클래스명)name2;

** 인스턴스 형 체크 방식 : 상위클래스명 instance of 하위 클래스명 //return ture or false

 

 추상클래스 

> 구현코드 없이 메서드의 선언(반환타입, 메서드 이름, 매개변수로 구성)만 있고 구현부({ 바디 부분 })는 없는 추상 메서드를 가지고 있는 클래스로 new키워드로 인스턴스화 불가

> 상속하기 위해 만듬 (public) abstract  class 클래스명 {  }

  # 추상클래스의 추상 메서드 : 하위 클래스가 상속하여 구현

  #추상클래스 내 추상메서드 : 상속받은 하위 클래스가 구현할 메서드

  # 추상클래스 내의 구현된 메서드:  하위 클래스가 공통으로 사용하는 메서드

 

 템플릿 메서드 패턴 

> 메서드를 활용하여 코드 흐름을 정의하는 메서드 설계패턴

> 변해야 하는 부분은 추상메서드로 선언하여 하위 클래스에서 구현

 

 인터페이스 

> 모든 메서드가 추상 메서드, 모든 변수는 상수

> 클래스나 프로그램이 제공하는 기능을 선언하는 일종의 클라이언트 코드와의 약속

> 클라리언트 프로그램은 인터페이스에 선언된 메서드 명세를 보고 클래스 사용가능하며 인터페이스를 구현한 다양한 객체를 사용 (다형성)

>  jdbc(oracle, MySQL등)와 java를 connection으로 연결 > connection은 인터페이스 =  JDBC인터페이스

> 하나의 클래스가 여러 인터페이스 구현 불가

 

디폴트메서드

> 구현을 가지는 메서드, 인터페이스를 구현하는 클래스들에서 공통으로 사용할 수 있는 기본 메서드로 default 키워드를 사용하여 선언, 하위 클래스에서 재정의 가능

default 타입 메서드명(){ }

정적메서드

> 인스턴스 생성하지 않아도 인터페이스 타입으로 사용할 수 있음

static 타입 메서드명(){ }

private메서드

> 인터페이스를 구현한 하위 클래스에서 재정의 불가하며 인터페이스 내부에서만 사용, default메서드와 static메서드에서 사용

static 타입 메서드명(){ }

ex) 위 calc인터페이스에 privatt, default, static메소드 추가 후 test 실행

//private 메서드
private void myMethod(){
    System.out.println("==myMethod==");
}
private static void myStaticMethod(){
    System.out.println("==myStaticMethod==");
}

//디폴트 메서드
default void description(){
    myMethod();
    System.out.println("정수의 사칙연산 완료");
}
//정적 메서드
static int total(int[] arr){
    myStaticMethod();
    int total = 0;
    for(int num : arr){
        total += num;
    }
    return total;
}

 

<인터페이스활용 다형성 구현>

하나의 인터페이스(userInfoDao)를 여러 객체(userinfo, userinfoMySqlDao, UserInfoOracleDao)가 구현하면

클라이언트 프로그램(UserInfoClient)은 인터페이스의 메서드를 활용하여 여러 객체 구현

 

DAO (Data Access Object)

> 데이터 베이스나 외부 파일 시스템과 같은 영속성 메커니즘에 접근하여 데이터의 CRUD 처리하는 객체 or 패턴

> 고수준인 Business Logic과 저수준인 Persistence Logic을 분리하기 위해, Persistence Logic을 캡슐화 하고 도메인 레이어에 객체지향적인 인터페이스를 제공하는 객체

영구 저장소: MySQL, PostgreSQL, MongoDB 등 

출처-hudi.blog

 여러 인터페이스 구현 

> 해당 클래스는 인터페이스 타입으로 형 변환 되는 경우 해당 인터페이스의 메서드만 사용가능

> 사용할 클래스에서 디폴트 메서드 중복시 구현 클래스에서 재정의

 인터페이스 상속 

> 인터페이스 사이에도 상속을 사용할 수 있음

ex) 

<자식인터페이스.java>
interface 자식인터페이스 extends 부모인터페이스{ }
<하위클래스.java>
public class 클래스명 implements 자식인터페이스{ }

[내일배움카드], [국비지원교육]

 

+ Recent posts