객체지향과 절차지향

김형민·2021년 9월 3일
0
post-thumbnail

절차지향

어플리케이션이 동작하기 위한 데이터와 함수 위주의 구성

정의 된 순서대로 함수가 하나씩 실행되는 프로그래밍방법

단점

프로젝트에 처음 투입이 된 경우라면 함수가 얽혀 있고 데이터도 다른곳에서 업데이트가 될 수 있기 때문에 하나를 수정하기 위해서 전체적인 어플리케이션이 어떻게 동작하는지 이해를 해야한다.

하나를 수정하면 다른 사이드 이펙트가 발생할 수 있다.

유지보수, 확장성 등의 여러면에서 단점이 있다

객체지향

프로그램을 객체로 정의해 객체들끼리 서로 의사소통해가는 방식

서로 관련있는 데이터와 함수를 여러가지 오브젝트로 정의해서 프로그래밍하는 것

오브젝트 단위로 만들어 한곳에서 문제가 생기면 관련있는 오브젝트만 수정하면 된다.

반복된 작업이 있다면 관련 오브젝트를 사용
새로운 기능이 필요하다면 새로운 오브젝트를 만들면 된다.

생산성이 높고 유지보수가 용이하다.

보통 하나의 오브젝트는 데이터와 함수로 정의되어있다.

보통 오브젝트 안의 data를 fields 혹은 property라고 부르며 함수는 보통 method라고 부르기도 합니다.

class

데이터가 들어오지 않는 이렇게 생겼어? 라고 정의해 놓는 templete이라고 할 수 있다.

ex) 피자라는 class가 있다

object

class에 데이터를 넣어서 만든것이 object

ex) 피자라는 classe를 이용해 고구마피자, 페퍼로니피자, 불고기 피자 등등을 만들 수 있음

이렇게 class를 이용해 object를 만드는 것이 객체지향 프로그래밍의 전부라고 말할 수 없다!

객체지향 원칙

Encapsilation(캡슐화)

절차지향 프로그래밍에선 여러가지 데이터와 함수들 여러가지가 섞여있다.

서로 관련있는 것들을 캡슐화 한다.
한 오브젝트 안에 담아둔다.
외부에서 볼 필요가 없는 데이터들을 잘 숨겨놓는다.

Abstraction(추상성)
내부 복잡한 기능들을 외부에서 간단한 interface를 이용해 사용할 수 있다.

ex) 우리가 커피머신을 이용할때 동작원리를 잘 몰라도 간단한 버튼으로 이용할 수 있는 것과 비슷하다!

Inheritance(상속성)
말그대로 클래스를 상속받아서 사용하는 것
정의된 클래스를 재사용 하는 것

ex) 커피머신 이라는 클래스가 있다고 가정하고
이를 이용해 나에게 맞게 커스텀된 커피머신을 만들 수 있다.

Polymorphism(다형성)
위 세가지를 통해 다양하게 구현된 것들

사실 이런 단어들을 아무리 들어도 이해가 안갔는데 타입스크립트와 자바, 스프링을 사용하면서 무슨 말인지 피부로 와닿게 되었다... 이론도 좋지만 쓰면서 깨닫는 것도 매우 중요한 것 같다..!

profile
항해 중인 개발자

0개의 댓글