프로그래밍 공부

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

카테고리 설명
  • 8.8 안정된 인터페이스 만들기 클래스는 추상화를 위한 C++의 핵심 도구다. 클래스를 디자인할 떄는 추상화 원칙을 적용하여 구현과 인터페이스를 분리해야 한다. 구체적으로는 모든 데이터 멤버를 private로 선언하고 외부에서 멤버에 접근할 필요가 있을 때는 get과 set메서드를 이용한다. SpreadSheetCell 클래스는 이러한 방식으로 구현되었다. mValue와 mString은 private 멤버며 set(), getValue(), getString()으로 값을 읽고 쓸 수 있다. 이러한 방식으로 클래스의 사용자가 mValue와 mString을 잘못 세팅 할 걱정 없이 내부적으로 동기화한다. 8.8.1 인터페이스 클래스와 구현 클래스의 활용 앞어 설명한 여러 가지 방법과 디자인 원칙에도 C++는..

  • 8.4 중첩된 클래스 클래스 정의가 메서드나 데이터 멤버만 담을 수 있는 것은 아니다. 클래스 정의에는 struct, typedef, enum도 포함될 수 있다. 클래스 안에 선언된 것들은 클래스명 에 스코프 지정 연산자::를 붙여서 이용 가능하다. 단, pulbic으로 선언되어 있어야 한다. 클래스 안에 또 다른 클래스를 정의하는 것도 가능하다. 예를 들어 SpreadSheetCell 클래스가 SpreadSheet 클래스의 구성 요소로 완전하게 포함된다면 다음과 같이 두 클래스를 동시에 정의할 수 있다. class SpreadSheet { class SpreadSheetCell { public: SpreadSheetCell(); SpreadSheetCell(double initalValue); Spre..

  • 8.3 메서드의 종류 데이터 멤버에 여러 종류가 있듯이 메서드 또한 여러 종류가 있다. 8.3.1 static 메서드 데이터 멤버의 경우와 마찬가지로 메서드도 특정 클래스의 모든 객체에 공통적으로 적용되어야 할 때가 있다. static 메서드의 선언 방법은 데이터 멤버와 같다. 예를 들어 SpreadSheetCell 클래스의 편의 메서드 stringToDouble() 과 doubleToString()을 생각해보자, 이 두 메서드는 객체에 종속되는 부분이 없다. 따라서 static으로 선언해도 된다. 다음은 이 두 메서드를 static으로 선언한 SpreadSheetCell 클래스 정의이다. static std::string doubleToString(double val); static double str..

  • 8.2 여러 종류의 데이터 멤버 C++는 여러 종류의 데이터 멤버를 지원한다. 단순한 데이터 멤버 외에도 특정 클래스의 모든 객체 간에 공유되는 static 데이터 멤버도 있고,const 멤버, 참조 멤버, const 참조 멤버 등 다양하게 존제한다. 8.2.1 static 데이터 멤버 어떤 경우에는 클래스의 객체별로 변수를 따로따로 가지는 것이 너무 중복되거나 의도에 맞지 않을 수 있다. 다시말해, 어떠 ㄴ데이터 멤버가 특정 클래스에 종속되기는 하지만 객체별로 따로 복제본을 가지는 것이 불합리할 수 있다. 예를 들어 각 스프레드 시트마다 순번을 매기려 한다고 하자, 순번을 중복되지 않게 0부터 순차적으로 부여하려면 최종 순번으로 몇 번이 부여되었는지 관리해야 한다. 이 값은 분명 SpreadSheet클..

  • 8. 클래스와 객체 마스터하기 8.1 동적 메모리 할당을 통한 객체 생성 메모리가 얼마나 필요할지 프로그램을 실행해보기 전에는 알 수 없는 떄도 있다. 이미 알고 있듯이 이럴 떄에 대한 해답은 동적 메모리 할당이다. 클래스 또한 예외가 아니다. 클래스를 정의 할 때 멤버 객체가 메모리를 얼마나 소요할지 알 수 없는 경우가 있다. 이때 그 객체는 동적으로 메모리를 할당받아야 한다. 동적으로 할당된 객체는 메모리 해제, 객체 복제, 객체 대입 연산 등과 관련해서 조금 까다로운 부분이 있다. 8.1.1 SpreadSheet 클래스 7장에서 만들었던 클래스를 예제로 활용한다. SpreadSheetCell이 그랬듯이 SpreadSheet클래스도 이 장에서 점진적으로 강화해 나갈 것 이다. 각 버전의 SpreadS..

  • 7. 클래스와 객체에 능숙해지기 객체지향 언어인 C++는 객체를 정의하고 사용하기 위한 기능으로 클래스를 제공한다. 클래스나 객체를 사용하지 않아도 C++언어로 프로그램을 작성할 수 있다. 하지만, 클래스와 객체를 사용하면 C++언어가 제공하는 기초적이면서도 유용한 기능을 활용할 수 있다. 클래스 없이 C++를 이용하는 것은 외국 여행을 다니면서 한식당만 찾는것과 같다. 7.1 스레드시트 실습 실제 실행 가능한 간단한 스프레드 시트 애플리케이션을 만들어보자. 스프레드시트는 2차원 격자로 된 셀이 있고, 각 셀은 숫자나 문자를 가진다. 마이크로소프트 엑셀 같은 상용 스프레드 시트 프로그램은 각 셀의 값을 대상으로 합계 등 수학 연산을 할 수 있다. 우리가 다룰 스프래드시트 예제는 스프레드시트 고유의 기능을..