추상화 (Abstraction)
추상화는 불필요한 것을 선택하고 제거하는 것
추상화(abstraction)는 대상에 대해 맥락에서 필요한 것에 대한 최소한의 형태가 남을 때까지 불필요한 것을 제거하는 전략입니다. 좋은 추상화는 중요하지 않은 세부 사항을 제거하고 중요한 사항들에 집중할 수 있도록 합니다.
캡슐화 (Encapsulation)
데이터와 메소드의 결합
- 데이터와 메소드를 하나의 캡슐로 결합
- 캡슐 경계는 내부와 외부를 결정

캡슐화(Encapsulation)에는 중요한 두 가지 관점이 있습니다.
- 데이터와 기능을 단일 개체로 결합
- 개체의 모든 멤버(메소드, 변수 등)에 대한 접근 가시성 제어
왜 캡슐화를 해야 하는가?
- 제어 허용
- 메소드를 통해서만 접근 가능하도록

- 변경 허용
- private 데이터 타입이 변경되어도 객체 사용에 영향을 미치지 않음

캡슐화를 하는 두 가지 목적은 다음과 같습니다:
- 사용 제어
- 변경의 영향 최소화
정적 메소드 (Static Method) 사용
- 정적 메소드(Static Method)는 정적 데이터에만 액세스 할 수 있음
- 정적 메소드는 클래스에서 호출됨. 객체가 아님

정적 메소드는 클래스의 모든 private 멤버에 대해 액세스를 유지하고 객체 참조를 통해 private 동적 데이터(static이 아닌 데이터)에 액세스 할 수 있습니다.
class time {
…
public static void resetTime(time t) {
t.hour = 0;
t.minute = 0;
hour = 0; // 컴파일시 오류
minute = 0; // 컴파일시 오류
}
private int, minute;
}
this 키워드
- this 키워드는 메소드/필드가 존재하는 객체 인스턴스를 참조함
- 다른 범위의 식별자가 충돌할 때 유용함
this 키워드는 암시적으로 개체 메소드를 호출하는 객체, 즉 객체 그 자신을 참조합니다.
상속 (Inheritance)
- 상속은 "is a kind of" 관계를 지정
- 상속은 클래스 사이의 관계
- 파생된 클래스는 존재하는 클래스에서 전문화됨

다형성(Polymorphism)
- 메소드 이름은 기본 클래스에 존재
- 메소드 구현은 파생된 클래스에 존재

추상 클래스 vs 인터페이스
서로 인스턴스화가 불가능함.
추상 클래스는 메소드의 구현이 가능함. 인터페이스는 메소드의 이름만 존재 가능
추상 클래스는 타입의 행위를 위해 사용되고, 인터페이스는 타입의 정의를 위해 사용됨.
Overload vs Override
Overload
- 같은 클래스
- 시그니처가 다른 메소드
Override
- 다른 클래스(상속 관계에 있는 서브 클래스)
- 시그니처가 같은 메소드
Quiz
1. 추상화에 대해 설명하고 소프트웨어 엔지니어링에서 추상화가 왜 중요한지 설명하세요.
추상화(Abstraction)는 복잡한 시스템에서 핵심적인 부분만을 추출하여 간단하게 표현하는 것입니다.
- 복잡성 관리: 큰 시스템을 더 작고 관리하기 쉬운 단위로 분해할 수 있습니다.
- 재사용성 향상: 잘 설계된 추상화는 다양한 상황에서 재사용될 수 있습니다.
- 유지보수성 개선: 구현 세부사항을 숨기고 인터페이스에 집중함으로써 시스템 변경이 용이해집니다.
2. 캡슐화의 두 원칙은 무엇입니까?
- 데이터 은닉(Data Hiding): 객체의 내부 상태를 외부에서 직접 접근하지 못하도록 숨깁니다.
- 행위 은닉(Behavior Hiding): 객체의 내부 구현을 숨기고 공개 인터페이스만을 제공합니다.
3. 객체지향 프로그래밍 관점에서 상속(Inheritance)를 설명하세요.
상속(Inheritance)은 기존 클래스의 특성을 다른 클래스가 물려받아 재사용하거나 확장하는 메커니즘입니다.
4. 다형성이란 무엇입니까? 이것이 이른 바인딩과 늦은 바인딩과 어떻게 연관됩니까.
다형성(Polymorphism)과 바인딩 다형성은 동일한 인터페이스를 통해 서로 다른 구현을 제공할 수 있는 능력입니다.
- 이른 바인딩(Early Binding): 컴파일 시점에 메서드 호출이 결정됨
- 늦은 바인딩(Late Binding): 런타임 시점에 실제 객체 타입에 따라 메서드 호출이 결정됨
Animal animal = new Dog(); // 다형성
animal.makeSound(); // 늦은 바인딩 - 런타임에 Dog의 makeSound() 호출
5. 인터페이스, 추상 클래스, 콘크리트 클래스에 대해 비교 설명하세요.
인터페이스:
- 메서드 선언만 가능
- 다중 구현 가능
- 상태를 가질 수 없음
- 모든 메서드는 기본적으로 public abstract
추상 클래스:
- 구현된 메서드와 추상 메서드 모두 가질 수 있음
- 단일 상속만 가능
- 상태를 가질 수 있음
- 다양한 접근 제어자 사용 가능
콘크리트 클래스:
- 모든 메서드가 구현되어 있음
- 직접 인스턴스화 가능
- 상태와 행위를 모두 가질 수 있음
'🚣활동 > NHN Academy' 카테고리의 다른 글
Stream (1) | 2025.01.24 |
---|---|
Lambda Expression (0) | 2025.01.20 |
객체 생성과 제거 (0) | 2025.01.16 |
참조 타입 (0) | 2025.01.14 |
static을 왜 사용하는가? (0) | 2025.01.09 |