✎NHN Academy | JAVA

NHN Academy - 2024.08.28(Wed)

박순돌 2024. 8. 28. 16:58

Module 10: Java에서의 상속

시작문제 - 싱글톤.java

 

생성자

 = 특수한 형태의 메소드

 = private 으로 선언하기

 

생성할 수 있는 것은 분류한 그래프 중에서 가장 맨 밑에 존재하는 것!

= 인스턴스 가 될 수 있는 것은 가장 맨 밑에 존재하는 것!

 

클래스가 클래스가 상속? => 잘못된 경우라고 의심해보기

 

상위 추상화 = 일반화           |            하위 추상화 = 전문화

 

메소드 오버라이딩 메소드 오버로딩
- 상위 클래스(부모 클래스)를 상속받은 하위 클래스(자식 클래스)가
   상위 클래스에 정의된 메소드를 다시 정의하는 것으로(재정의)
   객체 지향 프로그래밍의 특징인 다형성을 나타냄

- 재정의(Overriding)는 반드시 상속 관계에 있어야 하며,
   메소드 이름, 리턴타입, 매개변수의 개수 / 타입이 완전 일치해야 함
- 메소드가 처리하는 기능은 같고,
   메소드 괄호 속에 오는 인수(인자, 매개변수, 파라미터)의 개수가
   다르거나
자료형(Date Type)이 다른 경우

- 메소드의 이름을 동일 이름으로 부여해, 메소드 정의를 가능하도록
   문법적으로 허용함

 

생성자 선언 X, 눈에 보이지 않는 기본 생성자가 존재 O

서브 클래스 생성자에서 슈퍼 클래스의 생성자를 호출하려면 super() 사용

 

가상 메소드를 이용해서 다형성을 구현하기

virtual을 작성하지 않아도 되는 이유?   ->   모든 메소드가 가상 메소드로 동작 O 

 

메소드 오버라이딩  ==  서브 클래스에서 슈퍼 클래스의 메소드와 같은 시그너쳐로 정의 할 것!

 

UML 다이어그램 : Unified Modeling Language(통합 모델링 언어)를 사용하여 시스템과 소프트웨어를 시각화하는 방법

 

반복자(Iterator) 패턴일련의 데이터 집합에 대하여 순차적인 접근(순회)을 지원하는 패턴

 

추상 클래스 = 데이터에 대한 일반화를 표현할 때

인터페이스 사용

  추상 클래스 인터페이스
사용 키워드 abstract interface
사용 가능 변수 제한 없음 static final (상수)
사용 가능 접근 제어자 제한 없음 (public, private, protected, default) public
사용 가능 메소드


제한 없음 abstract / default / static / private
method
상속 키워드 extends implements
다중 상속 가능 여부


불가능 가능
(클래스에 다중 구현, 인터페이스 끼리 다중 상속)
공통점 1. 추상 메소드를 가지고 있어야 한다.



2. 인스턴스화 할 수 없다 (new 생성자 사용 X)
3. 인터페이스 혹은 추상 클래스를 상속받아 구현한 구현체의 인스턴스를 사용해야 한다.

4. 인터페이스와 추상클래스를 구현, 상속한 클래스는 추상 메소드를 반드시 구현하여야 한다.

 

 

추상 메소드 구현

 - 추상 클래스에서 구현이 없는 메소드 선언

 - abstract 키워드 사용

 - 추상 클래스에서만 추상 메소드를 선언할 수 있음

 

 


// Lab10-1
---------------------------------------------------------------------------------------
// BinaryOp.java
interface BinaryOp {
    public int apply(int left, int right);
}

// Adder.java
class Adder implements BinaryOp {
    public int apply(int left, int right) {
        return left + right;
    }
}

// Multiplier.java
public class Multiplier implements BinaryOp {
    public int apply(int left, int right) {
        return left * right;
    }
}

// Algorithm.java
public class Algorithm {
    static final int addFrom1To10 = 55;
    
    public static int sigma(int begin, int end, int step) {
        return accumulate(new Adder(), 0, begin, end, step); 
    }

    public static int pi(int begin, int end, int step) {
        return accumulate(new Multiplier(), 1, begin, end, step);
    }

    static int accumulate(BinaryOp binder, int init, int begin, int end, int step) {
        int result = init;
        for (int next = begin; next <= end; next = next + step) {
            result = binder.apply(result, next);
        }
        return result;
    }

    public static void main(String[] args) {
        System.out.println(sigma(1, 10, 1));
        System.out.println(pi(1, 10, 1));
    }
}

'✎NHN Academy | JAVA' 카테고리의 다른 글

NHN Academy - 2024.08.30(Fri)  (0) 2024.08.30
NHN Academy - 2024.08.29(Thu)  (0) 2024.08.29
NHN Academy - 2024.08.27(Tue)  (0) 2024.08.27
NHN Academy - 2024.08.26(Mon)  (0) 2024.08.26
NHN Academy - 2024.08.23(Fri)  (0) 2024.08.23