프로그래밍 공부

전문가를 위한 C++정리 73

카테고리 설명
  • 6.2 재사용성이 높은 코드를 디자인하는 방법 재사용성이 높은 코드는 두 가지 특성을 만족해야 한다. 첫 번째로 다른 분야의 애플리케이션이나 조금 다른 사용 시나리오에서도 무리 없이 적용할 수 있도록 기능이 충분히 일반화되어 있어야 한다. 특정 프로그램에 종속적인 세부 사항이 많이 포함된 코드는 다른 프로그램에서 재사용하기 어렵다. 두 번째로 재사용성이 높은 코드는 언제나 사용하기 쉬워야 한다. 인터페이스와 기능을 이해하는 데 너무 많은 시간을 소비하지 않고도, 충분히 준비된 상태에서 목적하는 애플리케이션에 적용할 수 있어야 한다. 코드를 전달하는 수단 또한 중요하다. 소스 코드 상태 그대로 전달할 수도 있고, 정적 또는 동적 라이브러리(윈도우의 DLL 또는 리눅스의 so 같은) 형태로 전달할 수도 있다..

  • 6. 재사용성을 높이는 디자인 라이브러리나 이미 존재하는 코드를 이용하는 것은 재사용 전략의 절반일 뿐이다. 나머지 절반은 내가 작성하는 코드를 재사용할 수 있게 만드는 것이다. 잘 만들어진 라이브러리와 그렇지 않은 라이브러리에 어떤 차이가 있는지 아마도 경험했을 것이다. 잘 만들어진 라이브러리는 기분 좋은 편리함을 느끼게 해주지만 엉성하게 만들어진 라이브러리는 어떻게든 이용해보려는 노력에도 스트래스만 잔뜩 주다가 결국 내손으로 직접 만들게 된다. 다른 프로그래머의 사용을 의도해서 만든 라이브러리든 단순히 클래스 계층을 이루려는 것이든 간에 항상 코드 재사용을 염두에 두고 있어야 한다. 언제 어디서 비슷한 기능을 필요로 할지 모른다. 재사용성 있는 디자인은 객체지향 원칙을 기반으로 해서 몇 가지 새로운 ..

  • 5.5 추상화 추상화는 해당 클래스의 이용 방법, 즉, 인터페이스를 그 구현과 분리하는 것이다. 추상화는 앞서 살펴본 여러 가지 이유에서 바람직하다. 그리고 객체 지향 디자인의 기본적인 요소다. 5.5.1 인터페이스와 구현 추상화의 핵심은 구현에서 인터페이스를 분리해애는 데 있다. 구현은 목적하는 작업을 수행하도록 작성한 코드고, 인터페이스는 다른 사람이 그 코드를 이용할 떄 사용해야 하는 규약이다. C에서는 헤더 파일이 라이브러리에 포함된 함수 목록을 담고 있어서 인터페이스 역할을 했다. 객체지향 프로그래밍에서는 클래스의 접근 가능한 프로퍼티와 행동이 인터페이스 역할을 한다. 좋은 인터페이스는 공개된(public) 행동만으로 이루어진다. 프로퍼티와 값은 그 자체로는 공개되지 않고 게터와 세터에 의해 공..

  • 5.4 객체 간 관계 프로그래밍을 하다 보면 서로 다른 두 클래스가 공통적인 속성을 가지거나 서로 어떤 연관 관계가 있는 경우를 만나게 된다. 예를 들어 그림, 음악, 보관 목록의 문자를 모두 나타내는 미디어 객체가 너무 일반적이긴 하지만 이들 객체가 뭔가 공통적인 속성이 있는 것 만큼은 분명하다. 예를 들어 세 미디어 모두 최종 수정 날짜를 가질 수도 있고, 삭제하기 행동을 가질 수도 있다. 객체지향 언어는 객체 간 관계에 대응하기 위한 몇 가지 매커니즘을 지원한다. 여기서 어려운 부분은 실제로 그 관계가 무엇인가? 하는 부분으로 크게 has-a 관계와 is-a관계 두가지가 있다. 5.4.1 Has-A관계 A가 B를 가질 때 또는 A가 B를 포함할 때 A와 B는 has-a관계 또는 집합(aggregat..

  • 5.3 객체 세상에서 생각하기 프로그래머가 절차적인 패러다임에서 객체지향 패러다임으로 전환하면 프로퍼티와 행동을 조합하여 객체로 만드는 새로운 통찰력이 생기는 것을 경험할 떄가 많다. 어떤 프로그래머는 작업하던 프로그램의 디자인 단계를 다시 밟아 일부 코드를 객체로 재작성하고, 어떤 프로그래머는 모든 코드를 버리고 객체지향 방식으로 완전히 새로 시작하기도 한다. 객체를 이용해서 소프트웨어를 개발할 떄는 두 가지 접근 방법이 있다. 어떤 사람에게는 객체가 단순히 데이터와 함수를 묵어주는 좋은 툴로만 보인다. 이러한 프로그래머는 코드의 가속성과 유지보수 편의성을 높이는 목적으로 여기저기 객체를 심게 된다. 이러한 접근 방법을 사용하는 프로그래머는 마치 외과의사가 심장질환 환자에세 심박 조절기를 심듯이 독립된..

  • 5.2 객체지향 철학 절차적 접근 방법에서 '이 프로그램은 무엇을 하는가?' 라는 질문을 던지는 것과는 달리, 객체지향 접근 방법에서는 '실세계의 객체를 어떻게 모델링하는가?' 라는 질문을 던진다. 객체지향 프로그래밍은 프로그램을 작업 단위로 쪼개는것 이 아니라 물리적 객체의 모델로 쪼갠다. 처음에는 이것이 너무 추상적으로 보이지만 물리적 객체를 클래스(Class), 컴포넌트(Component), 프로퍼티(Property), 행동(Behavio) 이라는 용어로 생각하면 명확해진다. 5.2.1 클래스 클래스는 단어 자체가 계층, 분류, 유형을 의미하며, 객체들을 구별한다. 예를 들어 오렌지를 생각해보자. 나무 열매 과일로서의 일반적인 오렌지를 저장하는 것과 방금 내 보드에 쏟은 주스를 지칭하는 것은 다르다..