TIL.객체지향 프로그래밍 OOP

chloe·2021년 1월 3일
0

TIL

목록 보기
34/81
post-thumbnail
post-custom-banner

객체 지향 프로그래밍 (Object Oriented Programming)

객체지향 프로그래밍은 컴퓨터 프로그래밍 패러다임 중 하나로 프로그램을 여러 개의 독립된 객체들과 그 객체들간의 상호작용으로 파악하는 접근법이다. 각 객체들은 서로 메시지를 주고 받을 수 있고 데이터를 처리할 수 있다.(객체들간의 소통)

=> 객체지향 기법은 현실 세계의 객체를 기계의 부품처럼 하나의 객체로 만들어, 기계적인 부품들을 조립하여 제품을 만들듯이 소프트웨어를 개발할 때에도 객체들을 조립해서 작성할 수 있도록 하는 기법

객체 지향 프로그래밍 이전의 프로그래밍 패러다임을 살펴보면 중심이 컴퓨터에 있었다. 컴퓨터가 사고하는대로 프로그래밍을 하는 것이다. 하지만 객체지향 프로그래밍이란 인간 중심적 프로그래밍 패러다임이라고 할 수 있다.
즉, 현실 세계를 프로그래밍으로 옮겨와 프로그래밍하는 것을 말한다. 현실세계의 사물들을 객체라고 보고 그 객체로부터 개발하고자 하는 애플리케이션에 필요한 특징들을 뽑아와 프로그래밍하는 것이다. 이것을 추상화라고 한다.

OOP 장점

1.코드 재사용이 용이하다
다른 사람이 만든 클래스를 가져와서 이용할 수 있고 상속을 통해 확장해서 사용할 수 있다.
2.유지보수가 쉽다.
객체지향 프로그래밍에서는 수정해야할 부분이 클래스 내부에 변수 혹은 메서드로 있기에 해당 부분만 수정하면 된다.
3. 대형 프로젝트에 적합하다.
클래스 단위로 모듈화 시켜서 개발할 수 있으므로 대형 프로젝트로 개발할 때 업무 분담하기가 쉽다.

OOP 단점

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

OOP의 기본 구성요소

💁‍♂️ 클래스와 인스턴스(객체),메서드는 무엇인가?
클래스: 같은 종류의 집단에 속하는 속성과 행위를 정의한 것.객체를 만들어내기 위한 설계도
인스턴스: 속성과 기능을 가진 것 중 실제하는 것. 상위 클래스의 속성을 가지고 있으면서 개별적인 특성과 행위(메서드)또한 가지고 있다.
메서드:클래스로부터 생성된 객체를 사용하는 방법.객체의 속성을 조작하는데 사용된다

OOP의 특성

1. 캡슐화: 캡슐화는 객체의 데이터를 외부에서 직접 접근하지 못하게 하고 함수를 통해서만 조작이 가능하게 하는 작업이다. 캡슐화를 하는 중요한 목적은 정보은닉이다.
2. 추상화: 추상화는 목적과 관련이 없는 부분을 제거하여 필요한 부분만을 표현하기 위한 개념
3. 상속: 상속이란 기존 상위 클래스에 근거하여 새롭게 클래스와 행위를 정의할 수 있게 도와주는 개념, 기존 클래스의 기능을 가져와 재사용할 수 있으면서도 동시에 새롭게 만든 클래스에 새로운 기능을 추가할 수 있게 만들어 준다.

OOP 구체적인 예시

카페라는 세상이 있다.
1. 객체들로 구성된 작은 세상으로 바라보자.
카페를 구성하는 요소들(손님,바리스타등)을 객체들로 보고 커피 전문점은 그 객체들로 이루어진 작은 세상이다. 손님이 커피를 주문하는 과정을 살펴보자.

손님이 메뉴판에서 4가지 메뉴 항목들 중 하나를 선택해서 바리스타에게 선택한 메뉴(커피)를 주문하고, 바리스타는 커피를 제조해서 손님에게 건네준다.

여기서 손님, 메뉴판, 메뉴항목들(4가지),바리스타,커피가 각각 하나의 객체가 될 수 있다.우선 손님 객체와 바리스타 객체를 먼저 생각해보자. 손님 객체가 주문하기 위해 메뉴가 필요할 것이고 그럼 메뉴 객체들이 있는 메뉴판 객체가 있어야할 것이다.
바리스타 객체가 손님 객체의 주문에 따라 제공해야할 커피 객체들이 필요할 것이다.

다시말해, 객체지향의 관점에서 커피 전문점이라는 도메인은 손님 객체, 메뉴 항목 객체,메뉴판 객체, 바리스타 객체, 커피객체로 구성된 작은 세상이다.

2.객체들간의 관계
손님은 메뉴판에서 커피를 선택할 수 있다.이런 관계가 있다.
메뉴판과 커피는 직접적으로 관계가 없다.

3. 객체들의 분류
4가지 커피 객체들을 모두 같은 커피 타입으로 분류할 수 있다.
=> 타입은 특정 인터페이스를 나타낼 때 사용하는 이름

클래스와 타입의 차이는 꼭 이해해야한다.
객체의 클래스는 그 객체가 어떻게 구현되느냐를 정의한다.
반면, 객체의 타입은 그 객체의 인터페이스 즉 그 객체가 응답할 수 있는 요청의 집합을 정의한다.

각 객체들은 아래와 같이 모델링할 수 있다.

  • 손님 객체는 '손님타입'의 인스턴스
  • 바리스타객체는 '바리스타타입'의 인스턴스
  • 메뉴판 객체는 '메뉴판타입'의 인스턴스

4.타입 간의 관계
각 객체들을 타입별로 분류했으니 이제는 그 타입들 간의 관계를 살혀보자.
설명을 위해 관계들을 구분하는 것임

1) 메뉴판 타입과 메뉴 항목 타입간의 관계
메뉴 항목 객체가 메뉴판 객체에 포함되어있으므로 메뉴판 타입과 메뉴항목 타입은 합성관계로 단순화할 수 있다.

2)손님과 메뉴판 사이의 관계
손님타입은 주문을 하려면 메뉴판 타입을 알아야 하지만, 그렇다고 메뉴판 타입은 손님의 일부가 아니므로 합성관계는 아니다. 연관관계라고 한다.

참고:https://woowabros.github.io/study/2016/07/07/think_object_oriented.html

profile
Front-end Developer 👩🏻‍💻
post-custom-banner

0개의 댓글