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 |