객체지향 관련 기본 용어
클래스
- 타입. 개념에 대한 의도가 있는 정의
- 속성(attribute)과 오퍼레이션(operation)을 캡슐화한 것
객체 (인스턴스)
- 클래스의 인스턴스
- 실제 메모리에 할당된 것. 프로그램에서 사용하는 것.
- 객체가 자료구조를 갖는다 = 객체가 어떤 속성를 가지고 있다
- 객체가 적용될 수 있는 오퍼레이션을 가진다 = 연산 능력을 가진다
모델링할 때 어떤 개념이 객체인지 속성인지 결정하기 어렵다.
- 속성은 입력할 수 있고, 객체는 불가능하다.
- ex) Student 는 객체. 학생 이름, 학번, 주소는 속성.
객체지향 특장점
캡슐화 Encapsulation
- 속성과 관련된 오퍼레이션을 클래스 안에 묶어서 하나로 취급하는 것
- 분류를 통한 재활용을 목적
추상화 Abstraction
- 핵심적인 기능을 추출해 일반화, 필요하지 않은 기능을 제거해 대상화
- 유연한 설계, 복잡도 관리 목적
→ 유연한 설계? 프로그램의 전체 구조를 잘 캡슐화하고 모듈화하여 기능 수정이 필요하면 최소한만 하면 되는 상태
(인터페이스를 구현한 클래스가 있다면 기능 수정이 필요할 때 코드 수정은 클래스만 하면 되고 인터페이스는 건드릴 필요 없음)
Head First Design Patterns 1장 참고- 인터페이스 Interface
HAS-A ~을 할 수 있는
다중상속 가능. - 추상 클래스 Abstract Class
IS-A ~이다
추상 메서드가 있는 클래스. 상속받은 클래스에서 추상 메서드 정의 필요. 객체 생성 불가.
- 인터페이스 Interface
- public class Kevin extends Human[추상 클래스] implements Programmer, Swimable[인터페이스]
상속 Inheritance
- 한 클래스가 다른 클래스의 일반화된 개념인 경우. 자식 클래스에서 부모 클래스의 메소드와 인스턴스를 그대로 상속받는 것
- 재사용을 목적
다형성 Polymorphism
- 객체가 다양한 형태를 가질 수 있는 것 = 같은 자료형에 여러 가지 객체를 대입할 수 있는 것
- 객체를 부품화하여 유지보수를 용이하도록 만듦
- 오버라이딩 Overriding : 상위 클래스의 메소드를 재정의
상위클래스의 구조를 유지하면서 각자 적합한 기능 이행
[[ 클래스 정의시 toString을 @Override 할 수 있는 이유 ]] - 오버로딩 Overloading : 파라미터에 따라 다른 기능
같은 메소드 이름 가능. 기억하기 쉽고 메소드 이름 절약 가능.공부할 때 캡쳐했던 건데 출처를 모르겠음
- 오버라이딩 Overriding : 상위 클래스의 메소드를 재정의
참고
- 소프트웨어공학개론 - 최은만 저
- [OOP] 다형성(Polymorphism)이란?
- 추상화
- [JAVA] 추상클래스 VS 인터페이스 왜 사용할까? 차이점, 예제로 확인 :: 마이자몽
'알아가는 중' 카테고리의 다른 글
[Kafka doc 3.2 읽기] 1.1 Introduction (0) | 2022.06.20 |
---|---|
[소프트웨어공학] UML | 관계 (0) | 2022.01.09 |
[React Native] React Navigation (0) | 2021.07.20 |
[React Native - Expo CLI] new update available, downloading (0) | 2021.07.19 |
[React Native] Props/State/Hook (0) | 2021.07.19 |