다운캐스팅
> 업캐스팅된 클래스를 다시 원래의 타입으로 형 변환하는 것으로 하위클래스로의 형변환은 명시적으로 해야함
묵시적) 상위클래스명 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 등
여러 인터페이스 구현
> 해당 클래스는 인터페이스 타입으로 형 변환 되는 경우 해당 인터페이스의 메서드만 사용가능
> 사용할 클래스에서 디폴트 메서드 중복시 구현 클래스에서 재정의
인터페이스 상속
> 인터페이스 사이에도 상속을 사용할 수 있음
ex)
<자식인터페이스.java>
interface 자식인터페이스 extends 부모인터페이스{ }
<하위클래스.java>
public class 클래스명 implements 자식인터페이스{ }
[내일배움카드], [국비지원교육]
'Java&SpringBoot' 카테고리의 다른 글
7주차) 패스트캠퍼스 Java & Springboot 로 시작하는 웹 프로그래밍 (0) | 2023.03.05 |
---|---|
6주차) 패스트캠퍼스 Java & Springboot 로 시작하는 웹 프로그래밍 (0) | 2023.02.25 |
내가 보려고 쓰는 IntelliJ 활용(단축키, Tip) (1) | 2023.02.18 |
sts 스프링 설치 오류 (0) | 2023.02.18 |
4주차) 패스트캠퍼스 Java & Springboot 로 시작하는 웹 프로그래밍 (0) | 2023.02.15 |