제 4장. 객체 지향 프로그래밍 시작하기 2011-1학기 프로그래밍언어및실습 (C++)
학습 목표 객체 지향 프로그래밍의 기본 개념과 장점을 알아본다. 클래스와 객체의 개념에 대해서 알아본다 객체 지향 프로그래밍의 세가지 특징인 캡슐화, 상속, 다형성에 대해서 알아본다. 2011-1학기 프로그래밍언어및실습 (C++)
객체 지향 프로그래밍이란 객체 지향 프로그래밍 인터페이스(interface) 관련된 함수와 변수를 묶어서 ‘객체(object)’를 만들고, 객체 단위로 프로그래밍하기 위한 방법 인터페이스(interface) 객체의 서비스에 대해서 미리 약속된 부분 v 2011-1학기 프로그래밍언어및실습 (C++)
소프트웨어의 부품화 객체 지향 프로그램에서의 객체는 프로그램을 구성하는 일종의 소프트웨어 부품 역할을 제공한다. 소프트웨어를 부품화하려면 객체의 사용 방법, 즉 인터페이스가 잘 정의되어 있어야만 한다. 2011-1학기 프로그래밍언어및실습 (C++)
객체 지향 프로그래밍의 장점 모듈간의 독립성이 증대된다. 재사용성이 증대된다. 융통성이나 확장성이 좋다. 특정 객체에서 문제가 발생하면 해당 객체의 구현만 수정하면 된다. 객체의 구현이 변경되더라도 객체의 사용 방법, 즉 객체의 인터페이스는 변경되어서는 안 된다. 재사용성이 증대된다. 클래스 라이브러리가 제공된다. 융통성이나 확장성이 좋다. 객체의 사용자는 객체의 서비스를 이용하기 위해서 객체의 인터페이스로 접근하는데, 인터페이스를 변경하지 않은 상태에서 객체의 내부 구현을 얼마든지 변경할 수 있다. v 2011-1학기 프로그래밍언어및실습 (C++)
클래스와 객체 (1) 클래스 객체가 가진 공통된 특성을 기술하는 것 일종의 데이터 형 역할 (사용자 정의 형) 2011-1학기 v 2011-1학기 프로그래밍언어및실습 (C++)
클래스와 객체 (2) 객체 클래스 형에 의해서 생성되는 변수 역할 구체적인 값을 갖는 실체(인스턴스) 2011-1학기 v 2011-1학기 프로그래밍언어및실습 (C++)
객체 지향 프로그래밍의 특징 캡슐화(encapsulation) 상속(inheritance) 다형성(polymorphism) v 2011-1학기 프로그래밍언어및실습 (C++)
캡슐화 (1) 캡슐화 정보 은닉 관련된 함수들과 변수들을 하나로 묶어주는 것 객체를 사용하기 위해서 필요한 부분을 제외한 나머지 부분을 캡슐로 감싸서 숨기는 것 정보 은닉 객체를 사용하기 위한 약속된 부분만 공개하고 객체의 내부 구현을 숨기는 것 객체를 잘못된 변경으로부터 보호할 수 있다. v 2011-1학기 프로그래밍언어및실습 (C++)
캡슐화 (2) Stack 클래스의 정보 은닉과 캡슐화 2011-1학기 프로그래밍언어및실습 (C++)
상속 상속 기존의 클래스가 가진 기능을 이어 받아서 새로운 클래스를 정의하는 것 재사용성 증대 파일 처리 기능 제공 (바이너리 입출력 기능) v 상속받은 바이너리 입출력 기능 + 텍스트 입출력 기능 2011-1학기 프로그래밍언어및실습 (C++)
다형성 다형성 같은 방법으로 객체의 서비스를 요청해도 어떤 객체가 사용되는지에 따라 다르게 동작하는 것 객체의 인터페이스가 같아도 내부적인 구현은 다르다. v 2011-1학기 프로그래밍언어및실습 (C++)
클래스와 객체 사용하기 string 클래스 vector 클래스 문자열에 대한 처리를 제공 실행 중에 크기를 변경할 수 있는 배열 기능을 제공 2011-1학기 프로그래밍언어및실습 (C++)
string 클래스 (1) 문자열 변경 : = 연산자 이용 문자열의 길이 구하기 : size 멤버 함수 이용 문자열 비교 : == 연산자 이용 string s1, s2; s1 = “hello world”; s2 = s1; string s1 = “abcde”; cout << s1.size(); string s1 = “abcde”; string s2 = s1; if( s1 == s2 ) cout << “s1과 s2는 같습니다.\n”; 2011-1학기 프로그래밍언어및실습 (C++)
string 클래스 (2) 문자열 입출력 : <<, >> 연산자 이용 공백 문자를 포함한 문자열 입력 : getline 함수 이용 string s1; cin >> s1; cout << s1 << “\n”; string s1; getline(cin, s1); 2011-1학기 프로그래밍언어및실습 (C++)
string 클래스 (3) const char* 형으로 변환 : c_str 멤버 함수 이용 string s1 = “abcde”; char *str = s1.c_str(); // 컴파일 에러 const char *str = s1.c_str(); // OK str[0] = ‘A’; // 컴파일 에러 char *tmp = new char[s1.size() + 1]; strcpy(tmp, s1.c_str()); // c_str 함수의 리턴 값을 복사함 tmp[0] = ‘A’; // OK 2011-1학기 프로그래밍언어및실습 (C++)
vector 클래스 (1) 실행 중에 크기를 변경할 수 있는 배열 기능을 제공 배열의 원소로 사용할 값의 데이터 형을 <>에 지정 (클래스 템플릿) 새로운 원소 추가 : push_back 멤버 함수 이용 vector<int> v1; // int 값을 저장하는 배열 vector<string> v2; // string 객체를 저장하는 배열 vector<WORD*> v3;// WORD 구조체 포인터를 저장하는 배열 WORD *pWord1 = new WORD; WORD *pWord2 = new WORD; v3.push_back(pWord1); // 배열의 원소를 추가 후 배열의 크기 증가 v3.push_back(pWord2); // 배열의 원소를 추가 후 배열의 크기 증가 2011-1학기 프로그래밍언어및실습 (C++)
vector 클래스 (2) 배열 원소의 개수 구하기 : size 멤버 함수 이용 배열의 원소 접근 : [] 연산자 이용 cout << “원소의 개수 : “ << v3.size() << “\n”; for(int i = 0 ; i < v3.size() ; i++ ) WORD* pWord = v3[i]; 2011-1학기 프로그래밍언어및실습 (C++)
정리 객체 지향 프로그래밍은 서로 관련된 함수와 변수를 하나로 묶어 객체를 정의하고, 객체 단위로 프로그래밍하는 것이다. 객체는 일종의 소프트웨어 부품으로 생각할 수 있다. 소프트웨어 부품을 조립해서 프로그램을 개발하는 방식에서 가장 중요한 것은 부품간의 연결을 위해서 약속된 부분, 즉 객체의 인터페이스가 필요하다는 점이다. 객체 지향 프로그래밍의 장점은 모듈화, 재사용성, 확장성이 증대된다는 것이다. 객체의 특성을 기술한 것을 클래스라고 하며, 클래스는 일종의 사용자 데이터 형이다. 클래스 형의 변수를 객체라고 한다. 객체 지향 프로그래밍의 세가지 특징은 캡슐화, 상속, 다형성이다. 클래스를 사용하는 사용자는 클래스에 구현된 기능을 믿고 사용할 수 있다. 즉, 객체를 사용하면 같은 기능을 안전하고 간편하게 이용할 수 있다. 2011-1학기 프로그래밍언어및실습 (C++)