객체와 객체지향 프로그래밍

Yeong·2023년 4월 19일

객체란?

객체는 중괄호 {}를 이용해 만들 수 있습니다. 중괄호 안에는 키(key) : 값(value) 쌍으로 구성된 프로퍼티를 여러개 넣을 수 있는데, 키엔 문자형, 값엔 모든 자료형이 허용됩니다. 중괄호 {}를 이용해 객체를 선언하는 것을 객체 리터럴이라고 부릅니다.

객체는 실생활에서 우리가 인식할 수 있는 사물이고, 그 안에는 속성과 메소드가 존재합니다.


객체 지향 프로그래밍

프로그램 구현에 있어서 필요한 객체를 파악하고, 각 객체들의 역할들이 무엇인지 정의하고 각 객체들간에 상호작용하도록 프로그래밍하는 것을 의미합니다.

특징

1. 추상화

객체의 공통적인 속성과 기능을 추출하여 정의하는것.
세부적인 사물들의 공통적인 특징을 파악한 후, 하나의 묶음으로 만들어내는 것!

ex) 이동수단 (바퀴가 있다는 공통점) / 자동차(바퀴4개), 오토바이(바퀴2개)

2.상속

여러 개체들이 지닌 공통된 특성을 부각시켜 하나의 개념이나 법칙으로 성립하는 과정 (일반화라고도 함)

클래스들 간 공유하는 속성과 기능들을 반복적으로 정의할 필요 없이 딱 한 번만 정의해두고 간편하게 재사용할 수 있어 반복적인 코드를 최소화하고 공유하는 속성과 기능에 간편하게 접근하여 사용할 수 있도록 합니다.

상속을 활용하면 상위 클래스의 구현을 활용함으로써, 코드 재사용이 용이해집니다.
그러나, 상속을 통한 재사용을 할 때 나타나는 단점이 명백하기에 객체지향 프로그래밍에서 '코드 재사용'을 목적으로 하는 상속 행위는 엄격히 금합니다.

이유1. 부모 클래스의 변경이 불편해짐
→ 부모 클래스에 의존하는 자식 클래스가 많을 때 부모 클래스의 변경이 필요하다면, 이를 의존하는 자식 클래스들이 영향을 받게 됨

이유2. 불필요한 클래스의 증가
→ 유사 기능 확장시, 필요 이상의 불필요한 클래스를 만들어야할 수 있다.

이유3. 잘못된 상속 사용
→ 같은 종류가 아닌 클래스의 구현을 재사용하기 위해 상속을 받게 되면, 문제가 발생할 수 있음. 상속받는 클래스가 부모 클래스와 IS-A 관계가 아닐 때 발생

그렇다면 이러한 문제는 어떻게 해결할까?
→ 구성 (Composition) 을 통해 해결

객체 구성은 객체 내부 필드에서 다른 객체를 참조하는 방식으로 구현합니다.
상속에 비해 런타임 구조가 복잡하고 구현이 어렵지만, 변경시 유연함을 확보할 수 있다는 장점이 큽니다.
→ 같은 종류가 아닌 클래스를 상속하고 싶을 땐, 객체 컴포지션을 먼저 적용해볼 것

3. 캡슐화

정보 은닉화를 통해 높은 응집도, 낮은 결합도를 유지할 수 있도록 설계하는 것.
서로 간에 의존성을 낮추어야 요구사항 변경에 대처하는 좋은 설계가 됩니다.

높은 응집도와 낮은 결합도는, '은닉화'를 통해 이루어낼 수 있습니다. 외부에서 접근할 필요 없는 것들은 접근 지정자를 private 으로 두어 접근에 제한을 두는 것이다.

4. 다형성

객체지향 패러다임의 핵심으로 상속과의 시너지가 엄청납니다. 다형성 구현을 통해 코드를 간결하게 해주고, 유연함을 갖추게 해줍니다.

0개의 댓글