110 likes | 271 Views
6. 기본 클래스. 프로그래밍 6 컴퓨터공학과 신동일. 형 (type). 변수의 형 차지하는 메모리 크기 포함할 수 있는 정보의 종류 수행 가능한 동작의 종류 크고 복잡한 실제 세계의 문제를 해결하기 위하여 새로운 형의 창조가 요구됨. 클래스. 클래스의 선언 -> 새로운 형 클래스 데이터 멤버 , 멤버 변수 : 클래스 내부의 변수 메쏘드 (method), 멤버 함수 : 클래스 내부의 함수 클래스 선언. class Cat { public:
E N D
6. 기본 클래스 프로그래밍 6 컴퓨터공학과 신동일
형 (type) • 변수의 형 • 차지하는 메모리 크기 • 포함할 수 있는 정보의 종류 • 수행 가능한 동작의 종류 • 크고 복잡한 실제 세계의 문제를 해결하기 위하여 새로운 형의 창조가 요구됨
클래스 • 클래스의 선언 -> 새로운 형 • 클래스 • 데이터 멤버, 멤버 변수: 클래스 내부의 변수 • 메쏘드(method), 멤버 함수: 클래스 내부의 함수 • 클래스 선언 class Cat { public: unsigned int itsAge; unsigned int itsWeight; Meow(); };
클래스 • 객체의 정의 • Cat Frisky; // Cat 정의 • 객체 = 인스턴스 (instance) • 멤버 엑세스 • Frisky.Weight = 50; • Frisky.Meow();
Private와 Public • 클래스의 모든 멤버는 기본값에 따라 private이다! • private 멤버: 클래스 자체 내부의 변수나 함수에서만 엑세스 가능 • public 멤버: 클래스의 객체를 통해서도 엑세스 가능 class Cat { unsigned int itsAge; unsigned int itsWeight; Meow(); }; Cat Garf; Garf.itsweight = 100; // error!
Private의 이용 • 멤버 데이터는 일반적으로 private으로 설정함 • 외부에서 직접적인 access를 방지 • 단, 멤버 데이터의 외부 설정을 위하여 public accessor method를 선언 • priavte 멤버 변수의 값을 읽거나 설정하는 클래스 멤버 함수로서 public으로 선언된 것 • 불편 감수의 이유 • 데이터의 이용 방법과 저장 방법의 분리 • 데이터 사용 함수를 재정의 하지 않고도 데이터 저장 방법을 변경 가능
클래스 함수의 구현 • int Cat:::Meow() { … } • 교과서 리스팅 6.3 참조 • 생성자와 소멸자 • 생성자: 클래스 멤버 변수의 초기화, 인자 가능 • Cat::Cat(); • 소멸자: 객체에 할당된 메모리 청소, 인자가 없음 • Cat::~Cat(); • 기본 생성자와 소멸자: 컴파일러가 설정, 아무일로 하지 않음
const 멤버 함수 • const 클래스 메쏘드: 그 함수가 클래스 내부의 변수값을 변경하지 않을 것이라는 약속 • void SomeFunction() const; • 만약, 함수를 const로 선언한 후 함수 구현부가 내부 변수를 변경 -> 컴파일 오류! • 가능한 많은 메쏘드를 const로 선언하라! -> 컴파일러가 오류를 찾아준다! • 교과서 P. 171: 컴파일러가 오류를 잡아내도록 하는 이유는?
클래스 선언과 메쏘드 정의 • 클래스 선언: 헤더 파일 • 메쏘드 정의: 본 파일, .CPP • 클래스 선언의 기능 • 클래스가 무엇이고 어떤 데이터를 포함하며 어떤 함수를 가지는지 알린다 • 클래스의 인터페이스(interface) • 메쏘드 정의 • 함수가 동작하는 방법을 알려줌 • 클래스 메쏘드의 구현부 • 클래스의 저자에게만 중요 -> 사용자에게는 불필요! -> 분리!
인라인 구현 • 클래스 메쏘드의 인라인 구현 • inline int Cat::Meow() { … } • 함수 정의를 클래스 선언에 포함 -> 자동 인라인 class Cat { int GetWeight() { return itsWeight; } void SetWeight(int aW); };
버그 사냥 class TV { public: void SetStation(int Station); int GetSttion() const; private: int intsStation; }; main() { TV myTV; myTv.itsStation = 9; TV.SetStation(10); TV myotherTv(2); }