1. 객체?
객체란 프로그램 동작의 주체가 되는 요소를 의미한다.
객체는 유형(존재하는 것)과 무형(존재하지 않는것)을 가리지 않고, 상태와 동작을 가진다.
예를들어, TV르르 구매한다고 하면, TV의 디자인, 성능, 가격등을 고려하여 TV를 구매할 것이다.
TV의 색, 인치, 가격 등은 TV가 가진 상태라고 볼 수 있다.
TV의 채널 이동, 다시 보기등은 TV의 기능이라고 볼 수 있다.
이렇게 모든 객체에는 상태와 동작이 존재한다.
2. 객체지향 프로그래밍(Object Oriented Programming)
객체들을 통해 코드를 구성하는 방법론이라고 정의한다.
모든 객체는 각 객체의 특성에 부합하는 상태와 동작을 가지며, 이를 통해 객체 간의 상호작용 코드를 나타낼 수 있다.
Java는 String, HashMap등 모든 요소를 객체로 다룬다. 필요한 객체를 메모리에 할당하고, 객체가 가진 변수나 메소드를 사용하여 코딩한다.
객체지향을 사용하는 언어는 매우 많다. 개표적으로 Java, C++, C#m Python등이 있다.
3. 객체지향 프로그래밍의 장, 단점
- 장점
- 코드의 재사용성 : 모듈화된 객체를 기반으로 코드가 작성되기 때문에, 해당 객체의 특징을 비슷한 다른 로직에 사용하거나, 다른개발자가 구현한 객체를 가져와 쓰기에도 용이하다.
- 간편한 유지보수 : 갹체를 수정할 경우, 해당 객체를 사용하는 모든 로직에 일괄적으로 적용되니, 중복 코드에 대한 관리가 간단해진다. 혹은 객체나 동작이 변경될 경우, 해당 객체나 동작과 연관된 객체만을 찾아 수정하면 된다.
- 큰 규모의 프로그래밍에 유리 : 객체, 모듈단위로 구분되는 특징으로 인해 업무 분장이 쉽고, 각 모듈의 연관성을 도식하기 용이하다.
- 단점
- 비교적 느린 속도 : 절차지향과 달리 객체지향은 각 객체의 의존 관계로 인해 대체적으로 속도가 느리다.
- 높은 설계역량 요구 : 모듈 단위의 상호작용으로 이루어진 방식은, 모듈의 정확한 명세와 상호 간의 연관성이 얼마나 짜임새있게 설계되었는지 중요하다. 잘 못 설계된 객체나 연관성은 성능 개선, 기능 확장, 유지 보수, 디버깅에 오히려 방해된다.
- 코드의 잠재적인 복잡성 : 높은 수준의 설계역량 요구와 더불어 추상 객체, 상속, 인터페이스 등의 복잡한 개념과 그 활용은 코드의 구조를 파악하기 여럽게 만든다.
4. 객체지향 프로그래밍의 4가지 특성
- 추상화
- 목적과 관련이 없는 부분을 제거하여 필요한 부분만을 표현하기 위한 개념이다.
- 클래스를 만드는 것이다.
- 예를들어, 자동차에서 벤츠, 아우디, 기아 등 여러 종류의 자동차가 있다. 이것을 다 클래스화하고 변수와 메서드 등을 개별적으로 만
드는 것은 힘들것이다. 따라서 방금 나열한 자동차들의 공통적인 요소나 특징을 추출하는 과정인 추상화를 거쳐 요소를 꺼내보면 바
퀴, 핸들, 유리창 등 필수적인 부품이 있다. 바퀴는 쿨러가고, 핸들은 돌아가는 등 필수적인 메서드가 추출된다. 이러한 과정을 추상화
라고 한다.
- 상속
- 기존 상위클래스에 근거하여 새롭게 클래스와 행위를 정의할 수 있게 도와주는 개념이다.
- 기존 클래스에 기능을 가져와 재사용할 수 있으면서도 동시에 새롭게 만든 클래스에 새로운 기능을 추가할 수 있게 만들어 준다.
- 상속은 코드의 중복을 없애기 위해 필요하다.
- 다형성
- 하나의 변수명, 함수명 등이 상황에 따라 다른 의미로 해석될 수 있는 것이다.
- OOP에서 다형성의 개념을 녹여내는 방법은 두가지인데, 오버라이딩(Overriding)과 오버로딩(Overloading)이다.
- 오버라이딩 : 부모 클래스에서 상속받은 자식 클래스에서 부모 클래스에서 만들어진 메서드를 자식 클래스에서 자신의 입맛대로 다시
재정의해서 사용하는 것을 말한다.
- 오버로딩 : 같은 이름의 메서드를 사용하지만 메서드마다 다른 용도로 사용되며 그 결과물도 다르게 구현할 수 있게 만드는 개념이다.
- 캡슐화
- 캡슐화의 목적 : 코드를 재수정 없이 재활용하는 것, 접근 제어자를 통한 정보 은닉
- 하나의 객체에 대해 그 객체가 특정한 목적을 위한 필요한 변수나 메서드를 하나로 묶는 것을 의미한다.
- Getter, Setter등의 메서드를 통해서 간접적으로 접근이 가능하도록 하는 것이 캡슐화의 목적이다.
'Basic > 코딩기초' 카테고리의 다른 글
[코딩기초] 의사코드(pseudo code) (0) | 2023.03.13 |
---|---|
[코딩기초] SSR vs CSR (0) | 2023.02.22 |
[코딩기초] 자료구조, 알고리즘, 운영체제 (0) | 2023.02.21 |
[트래픽] 서버가 트래픽을 견디는 법? (0) | 2023.02.20 |
[Cloud] AWS(Amazon Web Service) (0) | 2022.12.02 |