일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- error
- appstore
- PG결제
- struct
- Swift
- abstact
- Xcode
- IOS
- 성능 개선
- 갤럭시폴드
- Equatable
- DevTools
- 무선빌드
- MVVM
- FLUTTER
- Codemagic
- reactivex
- Codepush
- BloC
- fastlane
- flutter web
- GetX
- FocusNode
- copy on write
- delegate
- TextInputFormatter
- SHIMMER
- shorebird
- Android
- reject
- Today
- Total
뚝딱뚝딱 모바일
OOP에 대해 알아보자 본문
안녕하세요!
이번엔 OOP에 대해 한번 알아보도록 하겠습니다.
개인적으로 기술면접하면서 제일 많이 들었던 질문이기도 하고, 그만큼 중요한 이론이라고 생각 들어 정리 한번 해보려고 합니다.
먼저 OOP의 정의부터 알아가고 시작합시다.
OOP란?
OOP는 Object Oriented Programming의 약자로 객체 지향 프로그래밍을 뜻합니다.
프로그램을 단순히 데이터와 처리 방법으로 나누는 것이 아니라, 프로그램을 수많은 '객체(object)'라는 기본 단위로 나누고 이들의 상호작용으로 서술하는 방식이다. 객체란 하나의 역할을 수행하는 '메소드와 변수(데이터)'의 묶음으로 봐야 한다.
객체 지향 프로그래밍은 컴퓨터 프로그래밍의 패러다임 중 하나이다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다.
위에서부터 나무위키와 위키백과의 설명입니다. 대충 어떤 느낌인지 감이 오시나요?
이해가 안되시더라도 천천히 공부하다 보면 맨 처음 설명이 어떤 것이었다를 알게 되실 겁니다.
여기서 가장 핵심 단어라고 할 수 있는 객체란 무엇일까요?
위의 설명에서도 나오듯이 객체는 하나의 역할을 수행하는 '메소드와 변수(데이터)의 묶음'입니다.
조금 더 쉽게 설명하자면 상태 또는 값을 뜻하는 변수(데이터)와 어떠한 행동을 이행하는 메소드라고 말할 수 있을 것 같네요.
이러한 객체는 다른 객체의 구성요소가 되기도 하는 부품화, 한 곳만이 아닌 여러 곳에서 사용할 수 있는 재사용성의 특성으로 객체 지향 프로그래밍의 특징을 보여줍니다.
OOP의 특징
OOP는 주로 4개의 특징이 있는데
1. 추상화
- 공통된 속성과 기능을 묶는 것
- 예시로 사자, 호랑이, 토끼가 있으면 이들의 공통점인 동물로 묶는 것을 추상화라고 할 수 있다.
- 불필요한 정보는 숨기고 중요한 정보만을 표현
2. 캡슐화
- 변수와 함수를 하나의 단위로 묶는 것
- 외부로의 노출을 줄이고 각 모듈 간의 응집도를 높여 은닉화
- 재사용성의 증가
3. 상속
- 자식 클래스가 부모 클래스의 특성과 기능을 물려받는 것
- 캡슐화를 유지하면서 재사용이 가능하게 함
4. 다형성
- 어떤 한 요소에 여러 개념을 넣어놓는 것
- 오버라이딩 - 같은 이름의 메소드가 각 클래스마다 다른 기능을 수행하는 것
- 오버로딩 - 같은 이름의 메소드가 인자의 개수나 자료형에 따라 다른 기능을 수행하는 것
OOP의 5원칙 (SOLID)
5가지 원칙의 앞 글자를 따 SOLID 원칙이라고 합니다.
1. 단일 책임 원칙 (Single Responsibility Principle, SRP)
객체는 하나의 책임을 가져야 한다. 오직 하나의 이유만으로 변경, 수정되어야 한다.
2. 개방 - 폐쇄 원칙 (Open - Closed Principle, OCP)
객체는 확장에 대해선 개방적이고, 수정에 대해선 폐쇄적이어야 한다.
3. 리스코브 치환 원칙 (Liskov Substitution Principle, LSP)
자식 클래스는 언제든 부모 클래스를 대체할 수 있어야 한다.
4. 인터페이스 분리 원칙 (Interface Segregation Principle, ISP)
객체 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다.
5. 의존성 역전 법칙 (Dependency Inversion Principle, DIP)
고수준의 클래스는 저수준의 클래스에 의존하면 안된다.
제가 OOP에 대해 정리한 파트는 여기까지입니다. 아직 살이 덜 붙었지만, 틈틈이 공부하고 외운 것들을 추가하겠습니다.
혹시 오류가 있다면 댓글 남겨주시면 감사하겠습니다.
'CS 지식' 카테고리의 다른 글
ReactiveX에 대해 알아보자 (0) | 2024.01.05 |
---|