Backend/JAVA

객체지향 프로그래밍(OOP)

keepbang 2021. 7. 27. 20:02

객체지향 프로그래밍이란?

  • 객체지향 프로그래밍(OOP : Object Oriented Programming)은 프로그래밍에서 필요한 데이터를 추상화 시켜 역할과 책임을 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 기법이다.

객체지향의 사실과 오해라는 책에서는 객체지향에 대해 아래와같이 설명한다.

  1. 객체 지향 설계를 객체들간의 역할, 책임, 협력으로 이루어 진다
  2. 하나의 객체가 한가지 역할을 수행하고 그 역할을 수행 할 책임이 있으며 메시지를 통해 다른 객체와 협력하여 기능을 구현한다.
  3. 객체 지향 설계는 현실을 모방하는 것이 아니다. 현실을 닮아야 한다는 어떤 제약이나 구속도 없다. 창조한 객체의 특성을 상기시킬 수 있다면 현실 속의 객체의 이름을 이용해 객체를 묘사하도 된다. 그렇지 않으면 깔끔하게 현실을 무시하고 자유롭게 새로운 세계(객체)를 창조하면 된다.

객체지향 프로그래밍의 장단점

장점

  • 코드 재사용에 용이하다.
    • 상속을 통해 프로그램 코드의 재사용성을 높일 수 있다.
  • 대형 프로젝트에 적합하다.
    • 클래스 단위로 모듈화하여 작업하기 때문에 대형 프로젝트 협업시 개발 업무 분담이 쉽다.
  • 유지보수가 쉽다.
    • 프로그램 코드를 캡슐화하여 작성하기 때문에 수정이 필요한 부분만 수정하면 된다.

단점

  • 처리속도가 상대적으로 느리다.
  • 객체가 많으면 용량이 커질 수 있다.
  • 설계시 많은 시간과 비용이 필요하다.

객체지향 프로그래밍의 특징

1. 캡슐화(Capsulation)

객체에 필요한 데이터나 기능을 책임이 있는 객체에 그룹화 시켜주는 것을 캡슐화(Capsulation) 라고 하다.

캡슐화는 낮은 결합도를 유지할 수 있도록 해주는 객체지향 설계 원리이다

  • 캡슐화는 정보 은닉을 통해 높은 응집도와 낮은 결합도를 갖도록 한다.
  • 낮은 결합도를 가진 프로그램 코드는 한 클래스의 변경이 다른 클래스에 큰 영향을 미치지 않고 유지 보수 및 변경이 가능하다.
  1. 응집도
    클래스나 모듈 안의 요소들이 얼마나 밀접하게 관련되어 있는지를 나타낸다.
  2. 결합도
    어떤 기능을 실행하는 데 다른 클래스나 모듈들이 얼마나 의존적인지를 나타낸다.
  3. 정보 은닉
    외부에서 필요가 없는 정보는 접근하지 못하도록 제한하는 것(private)

 

2. 추상화(Abstraction)

  • 실제 세상을 객체화하는게 아니라 필요한 정보만을 중심으로 간소화하는것을 의미한다.
  • 공통의 속성이나 기능을 묶어 이름을 붙이는것

 

3. 다형성(Polymorphism)

  • 하나의 객체가 여러 가지 형태를 가질 수 있는 것을 의미한다.
  • 다형성의 개념을 사용하는 방법으로는 오버라이딩(Overriding)과 오버로딩(Overloading)이 있다.

 

오버라이딩(Overriding)

부모 메소드로부터 상속받은 자식 메소드는 부모와 같은 이름, 인자, 반환 값을 가지게된다. 이때 상속받은 메소드를 자식객체에서 재정의하는 것을 오버라이딩 이라고 한다.

 

오버로딩(Overloading)

같은 메소드(함수)이름을 가지고 있으나 매개변수의 타입 및 개수, 리턴 타입등이 다른 메소드(함수)를 생성하는 것을 말한다.

 

4. 상속(Inheritance)

  • 상위 클래스의 기능을 하위 클래스가 사용할 수 있도록하는 재사용과 확장의 개념이다.
  • 중복되는 코드의 재사용성을 위해서 여러 객체에서 사용되는 기능을 하나의 클래스로 분리하여 사용한다.

자바에서 다중상속은 불가능 하지만 Interface를 사용한 다중 구현(implements 사용)은 가능하다.

 

[참조]

 

객체 지향 프로그래밍이 뭔가요?

여러 sw기업 신입사원 기술면접에서 워밍업느낌으로 처음으로 자주 나오는 질문이다. "객체 지향 프로그래밍에 대해 설명 한 번 해주세요"에 대해 정리하자

velog.io

 

[Java] OOP(객체지향 프로그래밍)의 특징 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

 

객체지향 언어의 특징

캡슐화 데이터(속성)와 데이터를 처리하는 함수를 하나로 묶는 것 캡슈로하된 객체의 세부 내용이 외부에 은폐(정보 은닉)되어, 변경이 발생할 때 오류의 파급효과가 적다. 캡슐화된 객체들은

velog.io