mojo's Blog
객체지향 패러다임 본문
※ 추상적 데이터 유형 (Abstract Data Type)
- 데이터 및 관련 작업을 하나의 구문 단위로 캡슐화
- 단일 구문 단위 : 프로그램 구성, 수정 가능성(데이터 구조와 관련된 모든 것) 및 별도의 컴파일을 향상
- 캡슐화 : 데이터 표현을 숨김으로써 사용자 코드가 유형 객체에 직접 접근하거나 표현에 의존할 수 없으므로
사용자 코드에 영향을 주지 않고 표현 변경 가능
※ 상속 (Inheritance)
클래스 Y가 클래스 X에 속하는 경우 (Y -> X)
- Y는 X의 모든 메서드를 상속함
- Y는 X로부터 모든 데이터를 상속받음
- 타입 X의 인스턴스가 예상되는 곳 어디서나 Y의 인스턴스를 사용할 수 있음
※ 다형성 (Polymorphism)
작업이 다른 클래스에서 다른 방식으로 수행될 수 있는 객체 지향 소프트웨어의 속성
- 동일한 이름의 메서드가 여러 개 있어야 함
- 실행할 객체의 선택은 변수에 있는 객체에 따라 달라짐
- 많은 if-else 문을 코딩하거나 전환할 필요성을 줄임
※ 메소드 오버로딩 (Method Overloading)
Class A {
void method(int x) {
System.out.println("method:" + x);
}
void method(int x, int y) {
System.out.println("method:" + x + "/" + y);
}
double method(double x) {
System.out.println("method:" + x);
return x;
}
}
※ 메소드 오버라이딩 (Method Overriding)
public class A {
public void method() { // Base class method
System.out.println("hello A");
}
}
public class B extends A {
public void method() { // Derived class method
System.out.println("hello B");
}
}
※ 추상 클래스 및 추상 메서드
- 추상 메서드는 정의를 포함하지 않는 방법
- 추상 클래스는 객체화 할 수 없음
- 그러나, 추상 클래스 타입의 변수는 해당 자손의 객체를 참조할 수 있음
( Animal a = new Cat(); // 추상 클래스인 Animal과 해당 자손 클래스인 Cat )
※ 인터페이스 (Interface)
- 인터페이스에 정의된 모든 메서드는 추상적이며, 구현이 포함될 수 없음
- 인터페이스에는 객체 변수를 포함할 수 없음
- public static final 변수를 포함할 수 있음
※ 클래스 관계 (Class Relationships)
- Dependency: 한 클래스의 객체가 다른 클래스의 객체와 잠시 작업할 때 사용
- Association: 한 클래스의 객체가 다른 클래스의 객체와 일정 시간 동안 작업할 때 사용
- Aggregation: 한 클래스가 소유하지만 다른 클래스의 객체에 대한 참조를 공유할 때 사용
- Composition: 한 클래스가 다른 클래스의 객체를 포함할 때 사용
- Inheritance: 한 클래스가 다른 클래스의 타입일 때 사용
※ 정보 은닉 (Information Hiding)
- 내부 설계 결정을 숨기기 위한 설계 원칙
- 내부 설계 결정이 변경될 가능성이 가장 높음
- 향후 설계의 유지 또는 수정에 따른 부작용을 줄이고 설계의 다른 모듈에 미치는 영향을 최소화
'Design Patterns' 카테고리의 다른 글
Template Method Pattern (0) | 2024.06.06 |
---|---|
Observer Pattern (1) | 2024.06.06 |
Strategy Pattern (0) | 2024.06.06 |
GRASP (1) | 2024.05.15 |
SOLID 원칙 (0) | 2024.05.06 |