Object-oriented programming (줄여서 OOP)

 

문득 Javascript를 하다가 OOP가 자주 쓰이길 래, 무슨 말인지 몰라서 검색을 했다.

OOP는 프로그래밍을 한다는 사람이면 누구나 한 번쯤은 들어 봤으나, 추상적으로 다가 왔을 것이다.

Wikipedia에서 이렇게 설명하고 있지만, 쉽게 이해하지 못하는 사람도 더러 있을 것이다.(나 포함..)

객체 지향(객체 지향, 영어: object-oriented)은 소프트웨어 설계와 프로그램 기술에 사용되는 사고방식이다. 원래는 특정 프로그래밍 패러다임을 설명하기 위해 고안된 말이었다. object-oriented programming과 같이 수식어로서 사용되는 것이 보통이며, 그것 단독으로 취급되는 일은 없는 막연한 설계 구상이기도 하다.
참고: Wikipedia

나 머리 나쁜 것..확인...🤣

 

이해가 안되어서 인터넷을 좀 더 뒤져보았다.

 

듣자하니 객체 지향이 탄생하게 된 계기는  컴퓨터 프로그래밍 기술 및 컴퓨터 발전이 급속도로 진행되는 가운데 탄생되었다고 한다. 객체 지향 프로그래밍은 프로그래밍에서 필요한 데이터를 추상화(시스템, 모듈 등으로부터 "핵심적인 개념"을 간추려 내는 것) 시켜 그 데이터를 가진 객체 간의 상호작용을 일으키는 것이다. 

 

객체 지향의 구체적인 예로는 '자동차'로 이해할 수 있다.

자동차의 면허가 있는 사람이라면, 자동차의 기본적인 조작 방법은 알고 있고, 실제로 운전할 수 있을 것이다.(장롱면허 아닙니다.)

하나, 차의 면허를 가지고 있는 사람 전부가 차가 움직이는 구조를 알고 있는 것은 아닐 것..(그래도 운전이 되는 추상화 개념 갓갓.. 군대에 있을 때 운전병들은 제외..(진짜.. 차 내부 정비 핵 잘하더라구요...운전도 잘 하고..  운전병,부사관,장교님들 존경합니다.))

 

오히려 나처럼 자동차 구조와 같은 기계적 지식을 갖고 있지 않은 사람들이 더 많을 것이다.

이것은 무엇을 말하냐면, 자동차를 운전하는 데 차의 구조와 구조를 이해할 필요가 없다는 것이다. 몰라도 운전은 할 수 있다. 즉 자동차라고 하는 "물건"과, 차의 조작이라고 하는 "역할"을 나누어 생각하고 있는 것으로, 이 생각이 바로 OOP라고 할 수 있다.

 

객체 지향의 개념을 이해하기 위해서는 객체 지향과 관련된 의미를 파악하는 것이 중요하다.

 

클래스 : 프로그래밍은 설계도나 틀을 바탕으로 개발이 이루어지는 것으로, 이것은 객체 지향 프로그래밍에서도 동일하다.

무엇보다, 객체 지향의 프로그래밍에 사용하는 각각의 물건의 설계도를 클래스라고 한다.

클래스는 객체의 속성(데이터)과 메서드(동작, Activity)를 "정의"한다. <- 아직 설계도 일 뿐.

 

Object : "물건"이라는 의미이다. 프로그래밍에서는 데이터와 처리의 집합체라고 설명할 수 있다.

예를 들어, 야구 선수라는 오브젝트에는, 이름, 연령, 신장, 체중(속성)이라고 하는 데이터 외에

던지기, 달리기,라고 하는 처리(메서드)가 포함되어 있다.  즉, 객체에는 클래스에서 명사(속성) 외에도 동사(메서드) Activity에서 "정의" 한 것을 "구체화"한다. <-이렇게 생각하니 필자는 이해가 매우 쉬웠다.

 

캡슐화 : 객체의 상태를 외부에서 접근 못하게 막는 것.(일단 이정도로만 알고 캡슐화에 대한 세부 포스트 내용을 참고 하는 것이 좋다)

 

메서드: 메서드란, Object가 가지고 있는 처리를 말한다. 야구 선수라고 하는 오브젝트로 말하면, 

던진다, 잡는다, 친다, 달린다, 점프한다, 등 오브젝트가 "액션"을 일으키는 처리 다.

 

상속 : 객체 지향으로 개발된 물건에는 재이용하기 쉽다는 특징이 있다. 특히 클래스를 다른 제품 개발에

서 재사용하는 경우, 이를 "상속"이라고 한다.

 

다형성: 파트 마다 개발된 물건 은, 최종적으로는 각 파트가 연동하게 될 필요가 있다. 모든 파트가 하나의 지시로,

미리 정한 동작을 하는 구조를 만드는 것을 다형성이라고 한다. 어떤 하나의 변수명이나 함수명이 상황에 따라서 다르게 해석될 수 있는 것을 의미한다. 다형성은 어떤 한 가지 기능을 의미하는 것이 아니라 개념이기 때문에 여러 가지 방법으로 표현할 수 있다.

 

이 개념들은 필자가 각각의 개념들을 다시 알기 쉽게 정리해서 포스트 하였다. 중요한 개념이니 꼭 참고 해두었으면 한다!

 


객체 지향의 장점

 

1. 사용자 정의가 쉽고 유연한 대처가 가능하다.

객체 지향하에 프로그래밍을 하면 완성품에는 커스터마이즈가 쉬어진다는 장점이 있다. 사양 변경, 업데이트 등

유연하게 대응할 수 있는 것도 객체 지향의 큰 장점이라고 할 수 있다.

 

2. 작업자 간의 공유가 쉬워진다.

오브젝트 지향에 근거에 행해지는 개발에서는, 다수의 파트에 의해 구성되는 것을 세부에 이르기까지 작업자가

이해하면서 작업을 진행해 간다. 개별 작업자의 클래스에 대한 이해도가 높으면 작업자 간의 공유가 쉬워져

부드러운 작업으로 이어진다.

 

3. 재사용이 쉽고, 개발 작업의 효율화를 도모할 수 있다.

객체 지향으로 개발된 제품 또는 클래스는 재사용하기 쉽다는 장점이 있다. 이를 통해 기존 제품과 구조가

기본적으로 동일한 제품을 만드는 경우 개발 시간을 대폭 감소시킬 수 있다.

 

객체 지향의 단점

 

1. 이해하기 어렵다.

작업 방식이 아니라 개념인 객체 지향을 이해하는 것은 쉽지 않다. 이 점이 객체 지향의 가장 큰 단점이다.

 

2. 처음부터 개발할 때 코드가 복잡해지기 쉽다.

객체 지향에는 재사용이 쉽다는 장점이 있는 반면,  처음부터 개발하는 경우는 코드가 복잡해지기 쉽다는 단점도 있다.

따라서 재사용에 적합한 기성품이 없는 경우 많은 시간을 소비하게 된다. 

 

 

 

 

 

 

 

 

 

 

 

+ Recent posts