BigData 청년인재 프로그램(Java) - 11. 추상 클래스와 인터페이스
11. 추상 클래스와 인터페이스
6/28(수)Day03
-abstract는 불완전한것. 오직 상속대문에 사용, 선언만 존재하고 {}가없다, 재정의하여 사용
-상속의원칙(SOLID)
1. SRP (단일책임의 원칙: Single Responsibility Principle) : 1클래스 1기능->MVC(모델뷰컨트롤러)
2. OCP (개방폐쇄의 원칙: Open Close Principle) : 확장에개방, 변경에폐쇄
3. LSP (리스코브 치환의 원칙: The Liskov Substitution Principle) : 서브->부모 치환가능
4. ISP (인터페이스 분리의 원칙: Interface Segregation Principle) : 구체적인 인터페이스 구현
5. DIP (의존성역전의 원칙: Dependency Inversion Principle) : 서브의변경->부모의변경강제하면x
-형변환 : 자동형변환(자식->부모), 강제형변환(부모->자식, 조건부가능(instanceof연산값이 true))
<1. 추상 메서드>
1.1 메서드 몸체{}가 없는 abstract메서드
1.2 private과 final사용 불가능 why? abstract키워드는 상속과 관련有
1.3 추상클래스에서는 선언만->실체클래스에서 실행내용 작성(Override)
<2. 추상 클래스>
2.1하나이상의 abstract메서드를 가진 클래스는 반드시 abstract class로 선언해야 컴파일 오류x
2.2 final사용 불가는 why? 반드시 (실체class가)상속해야 하는 class=abstract class
2.3 추상클래스 용도 : 추상클래스를 상속받는 실체클래스들이 공통된 필드(멤버변수)+메서드(멤버함수)규격을(내용이 아님) 갖도록 강제하기 위함
<3. 인터페이스>
-Interface란?? 내부의 구체적 동작을 몰라도 사용법(메소드호출)만 알면 똑같은 기능을 사용할 수 있도록 하는 매개체(호환이 가능한 platform)
3.1 java의 interface란?? 추상메서드만 존재하는 class, spec만 선언한 class, 다중상속이 가능한 class
3.2 선언방법
public interface 인터페이스명{ ->private 접근제어자 사용불가능!!
//인스턴스 멤버변수, 클래스 멤버변수 사용불가능!!
int a;<-compile error
static int b;<-complie error
//상수
public final static double RADIAN = 3.141592...;
//추상메서드
public abstract void method();
------------------------------------여기까지 Java7.0(JDK7)
//디폴트 메서드(=인스턴스 메서드)
public void method1(){
int a;
...}
//정적 메서드(=클래스메서드)
static void method2(){
int a;
...}
------------------------------------Java8.0(JDK8)부터 인스턴스 메서드, 클래스 메서드 사용가능하도록 기능 추가됨
3.3 인터페이스명을 짓는법
3.3.1 명사나 형용사를 서술적으로 연결
3.3.1 interface명 앞 -> 대문자 i 를 붙임 : public interface Irun{}
3.3.2 interface명 뒤 -> able을 붙임 : public interface runnable{}
3.4 인터페이스의 특징 :
3.4.1 implements키워드로 다중상속 가능
3.4.2 able관계(A able B:A객체는 B인터페이스를 할수있다.)
3.4.3 private 불가능, 생성자불가능->new()로 객체생성 불가능
객체생성이 안되므로 인스턴스 변수, 인스턴스 메서드 정의 불가능
3.4.4 실체 클래스 선언시 :
방법1. implements로 상속받거나
->public class 클래스명 implements 인터페이스{ 추상메서드 }
방법2. anonymous 구현객체 생성(맨끝에 ;;;;;;구분자 표시 중요!!)
->인터페이스명 변수 = new 인터페이스명(){ 추상메서드 Override}.메서드호출;
방법3.anonymous객체 생성시 쉽게 람다식을 사용할 수 있다.
->인터페이스명 변수 = (파라미터1,파라미터2) -> 수행결과
->Javascript에서 익명함수 많이사용 : function(){~~~}
#anonymous구현객체생성 방법 vs 람다식 사용방법
// 생성과 동시에 이름없는 클래스 정의, 생성된 객체참조값은 m
new Movable() {
@Override
public void move() {
System.out.println("Anonymous");
}
}.move();// anonymous객체의 메소드 호출
// anonymous를 간단하게 사용하는게 람다식
Movable m = () -> System.out.println("Lambda");
댓글
댓글 쓰기