1. 객체지향이란?
더보기
클래스라는 틀에서 생겨난 실체를 객체라고 하며, 객체지향 프로그래밍은 객체들 간의 상호작용으로 이루어진다. 객체 지향 모델링은 기능이 아닌 객체가 중심이 되며 각각의 역할을 정의해나가는 것에 초점을 맞춘다.
- 객체 지향 프로그래밍의 특징
- 추상화 : 객체들의 공통적인 특징을 도출
- 캡슐화 : 실제로 구현되는 부분을 외부에 드러나지 않도록 정보 은닉
- 상속성 : 하나의 클래스가 가진 함수와 데이터를 다른 클래스가 그대로 물려 받아 기존 코드 재활용
- 다형성 : 오버라이딩(부모클래스-자식클래스), 오버로딩(매개변수 다르게)을 통해 동일 이름의 함수를 다른 방법으로 동작
- 동적바인딩 : 가상 함수를 호출하는 코드를 컴파일할 때 바인딩을 실행시간에 결정. 프로그램의 유연성 up, 다형 개념 실현
- 의존성 관리
- 변경 영향 최소화
- 독립적인 배포, 개발 가능
- DIP(Dependency Inversion Principle, 의존관계 역전 법칙) : DIP 통해 고수준 정책(high level policy)와 저수준 구현 세부사항(low level details)의 분리
2. 클래스와 객체는 무엇인가?
더보기
- 클래스 : 객체를 정의하는 틀(or 설계도)
- 객체 : 식별 가능한 개체 또는 사물. 클래스라는 틀에서 생겨난 실체. 객체는 구별 가능한 식별자, 특징적인 행동, 변경 가능한 상태를 가진다. 인스턴스들을 통칭하는 용도로 사용
3. 오버라이딩과 오버로딩이란?
더보기
- 오버라이딩
- 자식클래스가 부모클래스로부터 상속받은 메소드를 재정의하는 것.
- 런타임 다형성이기도 하다.
- 부모보다 좁은 접근 제어자를 가질 수 없다.
- @Override : 컴파일 타임에 오버라이딩에 대한 안정성을 부여 → 필수는 아니지만 필수로 써주자
- 오버로딩
- 같은 클래스 내에서 동일한 메소드명을 가지지만, 매개변수의 타입 또는 개수를 다르게 하여 구현.
- 컴파일 타임 다형성이기도 하다.
- ⇨ 동일한 기능을 하는 메소드를 하나의 이름으로 처리할 수 있다
- 차이
오버라이딩 | 오버로딩 | |
범위 | 클래스 상속 관계 | 같은 클래스 내 |
메소드명 | 원 메소드와 동일 | 원 메소드와 동일 |
매개변수 | 원 메소드와 동일해야 한다 | 원 메소드와 달라야 한다 |
리턴타입 | 원 메소드와 동일해야 한다 | 달라질 수도 있고 같을 수도 있다 |
접근제어자 | 원 메소드보다 넓거나 같은 범위를 가져야 한다 | 달라질 수도 있고 같을 수도 있다 |
4. 접근제어자의 종류와 설명
더보기
- 종류
- public > protected > defalult > private
- public : 전체 영역에서 접근 가능
- protected : 동일 패키지 + 상속한 클래스에서 접근 가능
- default : 동일 패키지에서 접근 가능
- private : 해당 클래스에서만 접근 가능
- 접근 제어자를 사용하는 이유
- 외부에 보여주고 싶은 정보들을 선택적으로 제공하기 위함
- 캡슐화와 통함(private)
5. 강한 결합과 느슨한 결합
더보기
- 결합도 : 의존성의 정도, 다른 모듈에 대해 얼마나 많은 정보를 알고 있는지
- 객체지향 관점에서 결합도는 객체 또는 클래스가 협력에 필요한 적절한 수준의 관계만을 유지하고 있는지를 나타냄
- 강한 결합도 : 어떤 모듈이 다른 모듈에 대해 너무 자세한 부분(구현 세부사항)까지 알고 있을 경우 → 지양
- 느슨한 결합도 : 어떤 모듈이 다른 모듈에 대해 필요한 정보만(인터페이스로 추상화된 고수준 정책) 알고 있는 경우
6. SOLID(객체지향 5대원칙)
더보기
- SRP(단일책임원칙) : 한 클래스가 하나의 책임만 가짐
- OCP(개방-폐쇄원칙) : 확장에는 열려있고 / 변경에는 닫혀 있음 & 다형성 활용
- LSP(리스코프 치환 원칙) : 프로그램의 객체가 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 함. 상위타입을 상속해서 재정의 했을 때 프로그램이 깨지지 않아야 한다.
- ISP(인터페이스 분리 원칙) : 클라이언트가 자신이 사용하지 않는 메소드에 의존 관계를 맺으면 안됨. 범용 인터페이스 하나 보다는 특정 클라이언트를 위한 여러 개의 인터페이스가 더 바람직. 비대한 인터페이스보다는 작고 구체적인 인터페이스로 분리해야 한다.
- DIP(의존관계 역전 원칙) : 추상적인 것은 자신보다 구체적이거나 변화하기 쉬운 것에 의존해서는 안 됨. 구현 클래스에 의존하지 않고 인터페이스에 의존해야 한다.
'개발하자' 카테고리의 다른 글
암호 - 대칭 암호화에 대해서 (0) | 2022.06.05 |
---|---|
컴퓨터공학과 졸업프로젝트로 사투리 오디오북 웹서비스 만들기(Glow-TTS, Django, Docker Compose, 졸프 후기) (0) | 2022.06.01 |
[Linux] Makefile 간단한 예제 (0) | 2021.11.29 |
[Linux] shared library 사용하기 (0) | 2021.11.29 |
[Linux] 두개의 분리된 파일을 하나의 실행파일로 합치는 과정 (0) | 2021.11.29 |