728x90
반응형
728x90
반응형

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

핵심 키워드는 객체입니다. 상태와 행위로 구분해 연관된 것들을 그루핑한 것을 객체입니다. 객체는 레고 블록처럼 하나의 완제품 소프트웨어를 만듭니다.

 

사이트 규모가 커지고 인원이 많아지고 오랜 시간 프로젝트가 진행되는 과정에서 어려움이 있습니다. 자연스럽게 복잡한 로직(변수, 메소드)들을 글목록, 본문, 댓글 등의 기능별로 그룹핑하고 싶다는 생각을 갖게 됩니다.

본문과 관련한 변수와 메소드가 응징되어있고, 댓글과 관련한 변수와 메소드가 응집되어있는 것이 객체입니다.


객체를 분류하여 소프트웨어를 쉽게 관리하도록 카테고라이징을 하면 기능이 나타납니다.

댓글의 기능이 다른 웹 사이트에서도 사용할 수 있기 때문에 이것이 바로 코드의 재활용성입니다.

이미 사용한 로직을 다른 곳에 사용하면 문제가 발생하니 여러 가지 로직을 제한하는 기능들이 추가하게 됩니다. 객체지향프로그래밍은 객체를 만드는 것이고 하나의 객체 안에 기능에 따라 모아 연관성 없는 것과 구분지은 것입니다.

 

추상화

설계를 잘하는 것은 어려운 일, 현실에서 관심있는 특성이나 관점을 소프트웨어화해서 프로그래밍 하는 것입니다.

위 그림은 런던의 지도입니다. 지하철을 이용한다면 어느 지도를 선호할까요? 마지막의 지도를 선택할 것입니다. 마지막 지도의 특징은 지하철 타는 사람의 유일한 관심사인 역의 이름과 환승하는 곳, 경유하는 역의 수입니다. 회로도의 영감을 얻어 만들었다고 합니다.

필요로 한 것만 현실에 추출한 것을 추상화(abstract ) 합니다.

현실을 프로그래밍 적으로 잘 만드는 것이 목표입니다.

안타깝게도 좋은 소프트웨어를 만드는 것은 지식의 영역 보다는 지혜의 영역입니다. 지혜는 잘 전달되지 않아 스스로 깨달아야 합니다. 자신의 맥락에 처해있는 문제를 지루하고 긴 시간 끝에 좋은 프로그래머가 나오는 것이라고 생각합니다.” 이고잉님의 말씀에 공감합니다.

 

부품화

입력을 담당하는 키보드, 실제 연산을 담당하는 Cpu와 메모리인 본체, 화면에 보여지는 디스플레이를 부품화 해야합니다.

기능들을 부품화 시킨 덕분에 소비자들은 더 좋은 키보드나 저렴한 모니터를 선택할 수 있게 되었습니다. 또 문제가 생겼을 때 그 문제가 어디에서 발생한 것인지 파악하고 해결하기가 훨씬 쉬워집니다.

어떻게 부품화하고 설계하느냐에 따라 다릅니다.

모니터와 저장장치가 하로 연결되어 있습니다. 시대에 따라 설계하는 방식이 달라지고 있습니다.

자신이 처한 환경에 적합한 설계(추상화)를 하는 것이 목표입니다.

메소드를 사용하는 기본 취지는 연관되어 있는 로직들을 결합해서 메소드라는 완제품을 만드는 것입니다. 그리고 이 메소드들을 부품으로 해서 하나의 완제품인 독립된 프로그램을 만드는 것입니다.

은닉화, 캡슐화

내부의 동작 방법을 단단한 케이스(객체)안에 숨기고 사용자에게는 그 부품의 사용방법(메소드)만을 노출하는 것입니다.

인터페이스

잘 만들어진 부품이라면 부품과 부품을 서로 교환할 수 있어야 합니다.

예를 들어 집에 있는 컴퓨터에 A사의 모니터를 연결하다가 B사의 모니터를 연결 할 수 있습니다. 또 집에 있던 모니터에 A사의 컴퓨터를 연결해서 사용하다가 새로운 컴퓨터를 구입하면서 B사의 컴퓨터를 연결 할 수 있습니다. 모니터와 컴퓨터는 서로가 교환 관계에 있는 것입니다. 이것은 모니터와 컴퓨터를 연결하는 케이블의 규격이 표준화 되어 있기 때문에 가능한 일입니다.

컴퓨터와 모니터를 만드는 업체들은 위와 같은 케이블의 규격을 공유합니다. 모니터 입장에서는 컴퓨터가, 컴퓨터 입장에서는 모니터가 어떤 식으로 만들어졌는지는 신경 쓰지 않습니다. 각각의 부품은 미리 정해진 약속에 따라서 신호를 입, 출력하고, 연결점의 모양을 표준에 맞게 만들면 됩니다. 이러한 연결점을 인터페이스(interface)라고 합니다.


출처 : 생활코딩 강의

728x90
반응형
728x90
반응형

+ Recent posts