SlideShare a Scribd company logo
1 of 20
Download to read offline
8. 객체와 클래스 (기본)
차례 
• 객체지향 프로그래밍 시작을 위해 
• 객체지향 프로그래밍 
• 객체지향의 특징 
2/20
객체지향 프로그래밍 시작을 위해 
• 순차적 프로그래밍 
• 구조적 프로그래밍 
• 문제를 하향식으로 여러 개의 기능으로 나누어 구현  함수 
• 객체지향 프로그래밍 
• 사람의 실 세계를 컴퓨터 프로그래밍으로 옮겨놓은 형태로 추상 
적 개념이 있고, 실체화된 객체가 프로그램 실행을 담당한다. 
3/20
객체지향 프로그래밍 
• 문제 분석의 포커스 
• 문제를 “누가 무엇으로 어떻게 하는가”의 질문에 맞춰 대답할 수 
있어야 함 
• 누가  실제 문제를 풀어나가는 주체 : 객체 
• 무엇  객체 연산에 필요한 자료 : 멤버 변수 
• 어떻게  객체 연산 : 멤버 함수 
4/20
객체와 클래스 
• 객체와 클래스 
• 클래스 : 추상적 개념체 
• 객체 : 프로그램의 동작 주체인 실체 
클래스 객체 
사람 나, 내친구, 옆집아줌마 
컵 내가 사용하는 컵, 갑돌이의 컵 
자동차 건물 앞에 세워진 자동차, 내 자동차 
운동화 내 친구의 하얀색 운동화 
• 클래스란 실체인 객체를 만들기 위한 틀!! 
5/20
클래스 정의 1 
• 프로그램 코드에서의 작성 순서 
• 클래스 정의  객체 생성 
• 설계에서의 작성 순서 
• 문제 분석 객체 식별  클래스 정의 
• 클래스 
• 멤버변수 : 상태, 처리 대상 등의 정보 
• 멤버함수 : 자료 처리 등의 동작을 수행 
6/20
클래스 정의 2 
• 클래스 선언 
class 클래스이름 
{ 
클래스 멤버; //멤버 변수와 멤버 함수 
}; 
문제 : “하나의 정수를 변수에 저장하고 해당 변수를 화면에 출력하는 프로그램”을 
객체지향 프로그래밍으로 작성하기 
• 누가  값을 저장하고 출력하는 객체 
class IntSample //클래스 이름 
• 무엇을  정수 값 
{ 
• 어떻게  화면에 출력하기 
void ShowScore(); //출력 함수 
int Score; //정수 저장할 변수 
}; 
7/20
클래스 정의 3 
• 클래스 멤버 함수 정의 
자료형 클래스이름::멤버함수(매개변수) 
{ 
함수 내용; 
• 멤버 함수 정의에서 동일 클래스의 멤버 변수는 직접 접근하여 참 
조 가능함 
} 
void IntSample :: ShowScore( ) 
{ 
cout << “점수 : “ << Score << endl; 
//Score는 IntSample 멤버변수이므로 별도의 선언 없이 사용 가능함 
} 
8/20
클래스 정의 4 
• 선언된 클래스를 통해 객체 생성 
• 생성된 객체는 클래스에 정의된 멤버 변수와 멤버 함수를 참조 
• 변수는 “선언한다”  값을 저장하는 공간 
• 객체는 “생성한다”  동작하는 실체 
9/20
코딩으로 살펴본 클래스와 객체 
일반 자료형 구조체 클래스 
정의 형태 이미 정의되어 있음 사용자가 구조체형을 정의 사용자가 클래스를 정의 
내용 int, float, double, 
char 등 
여러 자료형 멤버를 포함할 수 있음 여러 자료형 멤버 + 여 
러 기능을 갖는 함수 
사용 형태 자료형의 변수를 선언 
자료형 변수이름; 
예) int a; 
정의한 구조체형 변수 선언 
구조체형 변수이름; 
예) 
typedef struct 
{ 
char name[30]; 
int age; 
} PERSON; 
PERSON b; 
정의한 클래스의 객체 
생성 
클래스이름 객체이름; 
예) 
class SamClass 
{ 
…………. 
}; 
SamClass obj; 
비고 변수 하나에 하나의 자 
료 저장 
하나의 변수에 각 멤버 별로 자료 저 
장 
자료를 저장할 수 있는 
변수와 기능을 수행하는 
함수가 포함됨 
10/20
멤버 접근 속성 
• 클래스 멤버의 접근 속성 
• private : 기본 접근 속성, 같은 클래스 멤버 내에서만 접근 허용 
• protected : 클래스 상속에서 사용됨 
• public : 모든 위치에서 접근 허용 
• 클래스 멤버 참조 연산자 
• 점(.) 
11/20
#include <iostream> 
using namespace std; 
class IntSample 
{ void ShowScore(); 
int Score; 
}; 
void IntSample::ShowScore() 
{ 
cout << "점수: " << Score << endl; 
} 
int main() 
{ 
멤버 접근속성을 명시하지 
않으면 private로 간주됨!!!! 
ShowScore( ) 멤버 함수는 Score와 
동일한 IntSample 클래스의 멤버이 
므로 멤버 변수를 직접 참조 가능함!! 
IntSample Obj; //객체 생성 
Obj.Score=100; //객체 Obj의 멤버 변수 Score에 값 할당하기  에러 
Obj.ShowScore(); //객체 Obj의 멤버 함수 ShowScore() 호출하기  에러 
return 0; 
} 
클래스 선언 
클래스 멤버 함수 정의 
main( ) 함수는 IntSample 클래스 내 
가 아닌 클래스 밖이므로 해당 멤버에 
직접 참조할 수 없음!!! 
에러 메시지 : 
error C2248: 'IntSample::Score': private 멤버('IntSample' 클래스에서 선언)에 액세스할 수 없습니다. 
error C2248: 'IntSample::ShowScore': private 멤버('IntSample' 클래스에서 선언)에 액세스할 수 12/20 
없습니 
다.
일반적으로 정의되는 형태:멤버 접근 속성 
• 기본 멤버 접근 속성이 private인 이유 
• 생성된 객체 정보는 접근 권한이 있는 경우에만 참조케 함을 목적 
으로 함  보안성 고려 
• private 멤버는 public 멤버 함수를 통해 접근토록 클래스를 설계 
함  직접적 접근 허용 방지 
• 일반적으로 멤버 변수는 private, 멤버 함수는 public으로 
하며, 클래스 선언에서 멤버 접근 속성이 public  
protected  private 순으로 코딩 
13/20
#include <iostream> 
using namespace std; 
class IntSample 
{ 
public : 
void ShowScore(); 
void setScore(const int s); 
int getScore(); 
private : 
int Score; 
}; 
void IntSample::ShowScore() 
{ 
cout << "점수: " << Score << endl; 
} 
void IntSample::setScore(const int s) 
{ 
Score=s; 
} 
int IntSample::getScore() 
{ 
return Score; 
} 
int main() 
{ 
IntSample Obj; 
Obj.setScore(100); 
cout << "점수: " << Obj.getScore() << endl; 
return 0; 
} 
14/20
프로그램 코딩에서 
• 클래스 선언은 헤더 파일, 정의는 소스 파일 
• 객체 생성 및 테스트는 main( ) 함수에서 실행 
//IntSample.h 
#ifndef _INTSAMPLE_H_ 
#define _INTSAMPLE_H_ 
#include <iostream> 
using namespace std; 
class IntSample 
{ 
public : 
void ShowScore(); 
void setScore(const int 
s); 
int getScore(); 
private : 
int Score; 
}; 
#else 
#endif 
//IntSample.cpp 
#include "IntSample.h" 
void IntSample::ShowScore() 
{ 
cout << "점수: " << Score << endl; 
} 
void IntSample::setScore(const int s) 
{ 
Score=s; 
} 
int IntSample::getScore() 
{ 
return Score; 
} 
//IntSample_main.cpp 
#include "IntSample.h" 
int main() 
{ 
IntSample Obj; 
Obj.setScore(100); 
cout << "점수: " << Obj.getScore() << endl; 
return 0; 
} 
15/20
실습 1 
문제 : 키와 몸무게를 입력받아 표준 몸무게를 계산하여 “저체중”, “정상체중”, 
“과체중”인가를 표시하자. 
문제를 “누가 무엇을 가지고 어떻게 동작하는가”의 시각으로 바라보자. 
먼저 생성될 객체의 작업 대상인 “무엇”을 식별해 보자. 작업 대상이 되는 항목은 키와 몸무게 이다. 
그리고 어떻게 동작하는가는 먼저 키와 몸무게를 외부에서 동작하는 객체에 전달받을 수 있어야 하 
고, 키를 이용해서 표준 몸무게를 계산할 수 있어야 한다. 또한 표준 몸무게와 전달받은 몸무게를 비 
교하여 체중의 상태를 판단해서 객체 밖으로 전달할 수 있어야 한다. 
멤버 변수 
• 키 : 소수점 이하 자리를 다룰 수 있도록 배정도형으로 하자. 
• 몸무게 : 소수점 이하 자리를 다룰 수 있도록 배정도형으로 하자. 
• 체중 상태 : 체중 상태는 표준 몸무게 계산 후 일정한 처리에 의해 산출되 
는 정보로써 표준 몸무게 자체를 멤버 변수로 해도 된다. 그러나 이번에는 
체중 상태를 멤버 변수로 하겠다. -1은 저체중을, 0은 정상체중, 1은 과체중 
으로 표시하자. 
double height, weight; 
int WeightStatus; 
16/20
멤버 함수 
• 키를 외부에서 객체로 전달하는 기능 : 매개변수로 키 값을 전달받음 
• 몸무게를 외부에서 객체로 전달하는 기능 : 매개변수로 몸무게를 전달받음 
• 키를 객체 외부로 전달하는 기능 : 함수의 반환값으로 외부에 전달함 
• 몸무게를 객체 외부로 전달하는 기능 : 함수의 반환값으로 외부에 전달함 
• 표준 몸무게 산출해서 체중 상태를 구하는 기능 
• 체중 상태를 객체 외부로 전달하는 기능 : 함수의 반환값으로 외부에 전달함 
void setHeight(const double h); 
void setWeight(const double w); 
double getHeight(); 
double getWeight(); 
int StdWeight(); 
int getWeightStatus(); 
소스 8-1 (ch08_weight.h) 
소스 8-2 (ch08_weight.cpp) 
소스 8-3 (ch08_01.cpp) 
17/20
실습 2 
문제 : 다음은 수업에 등록한 학생을 관리하는 클래스이다. 주어진 상황에 맞게 
클래스를 선언, 정의해서 테스트 해보자. 
출력 형태 : 
과정명 입력 : C++ 프로그램 
수강학생 이름 입력 : 
이름 : 박진영 
계속입력하시겠습니까? (y/n) y 
이름 : 김동현 
계속입력하시겠습니까? (y/n) y 
이름 : 김소연 
계속입력하시겠습니까? (y/n) y 
이름 : 김창민 
계속입력하시겠습니까? (y/n) y 
이름 : 황청자 
계속입력하시겠습니까? (y/n) n 
수강학생 명단 : 
박진영 김동현 김소연 김창민 황청자 
총 수강학생 수 : 5명 
18/20
누가  수업에 등록한 학생 관리 객체 
무엇을  과정명, 수업에 등록한 학생 명단, 수업에 등록한 총 학생 수 
어떻게  과정명을 외부에서 전달받아 저장, 
수강생 이름을 외부에서 전달받아 수강생 목록에 저장, 
수강생 목록에 총 수 계산, 
수강생 목록을 외부에 전달하기, 
총 수강생 수를 외부에 전달하기 
클래스 이름 : Course 
멤버 변수 
•과정명 
•수강학생 명단 
•총 수강학생 수 
멤버 함수 
•과정명을 객체 내부로 전달하는 함수 
•한 명의 수강학생 이름을 객체 내부로 전달하는 함수 
•수강학생 이름 전체를 객체 외부로 전달하는 함수 
•총 수강학생 수를 객체 외부로 전달하는 함수 
소스 8-4 (ch08_course.h) 
소스 8-5 (ch08_course.cpp) 
소스 8-6 (ch08_02.cpp) 19/20
객체지향의 특징 
• 추상화 (Abstraction) 
• 캡슐화 (Encapsulation) 
• 상속 (Inheritance) 
• 다형성 (Polymorphism) 
20/20

More Related Content

What's hot

Java programming pdf
Java programming pdfJava programming pdf
Java programming pdfJi Hoon Lee
 
파이썬 함수 이해하기
파이썬 함수 이해하기 파이썬 함수 이해하기
파이썬 함수 이해하기 Yong Joon Moon
 
파이썬+함수 데코레이터+이해하기 20160229
파이썬+함수 데코레이터+이해하기 20160229파이썬+함수 데코레이터+이해하기 20160229
파이썬+함수 데코레이터+이해하기 20160229Yong Joon Moon
 
파이썬 프로퍼티 디스크립터 이해하기
파이썬 프로퍼티 디스크립터 이해하기파이썬 프로퍼티 디스크립터 이해하기
파이썬 프로퍼티 디스크립터 이해하기Yong Joon Moon
 
파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기 파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기 Yong Joon Moon
 
파이썬 Descriptor이해하기 20160403
파이썬 Descriptor이해하기 20160403파이썬 Descriptor이해하기 20160403
파이썬 Descriptor이해하기 20160403Yong Joon Moon
 
파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기Yong Joon Moon
 
파이썬+클래스+구조+이해하기 20160310
파이썬+클래스+구조+이해하기 20160310파이썬+클래스+구조+이해하기 20160310
파이썬+클래스+구조+이해하기 20160310Yong Joon Moon
 
게임프로그래밍입문 7
게임프로그래밍입문 7게임프로그래밍입문 7
게임프로그래밍입문 7Yeonah Ki
 
정찬명 - CSS Selectors in HTML [WSConf. Seoul 2016/2017]
정찬명 - CSS Selectors in HTML [WSConf. Seoul 2016/2017]정찬명 - CSS Selectors in HTML [WSConf. Seoul 2016/2017]
정찬명 - CSS Selectors in HTML [WSConf. Seoul 2016/2017]WSConf.
 
Java 변수자료형
Java 변수자료형Java 변수자료형
Java 변수자료형Hyosang Hong
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 Yong Joon Moon
 
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)MIN SEOK KOO
 
파이썬 반복자 생성자 이해하기
파이썬 반복자 생성자 이해하기파이썬 반복자 생성자 이해하기
파이썬 반복자 생성자 이해하기Yong Joon Moon
 
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)MIN SEOK KOO
 
파이썬 Special method 이해하기
파이썬 Special method 이해하기파이썬 Special method 이해하기
파이썬 Special method 이해하기Yong Joon Moon
 
파이썬 iterator generator 이해하기
파이썬 iterator generator 이해하기파이썬 iterator generator 이해하기
파이썬 iterator generator 이해하기Yong Joon Moon
 
프론트엔드스터디 E03 - Javascript intro.
프론트엔드스터디 E03 - Javascript intro.프론트엔드스터디 E03 - Javascript intro.
프론트엔드스터디 E03 - Javascript intro.Young-Beom Rhee
 
파이썬 객체 클래스 이해하기
파이썬  객체 클래스 이해하기파이썬  객체 클래스 이해하기
파이썬 객체 클래스 이해하기Yong Joon Moon
 
파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131Yong Joon Moon
 

What's hot (20)

Java programming pdf
Java programming pdfJava programming pdf
Java programming pdf
 
파이썬 함수 이해하기
파이썬 함수 이해하기 파이썬 함수 이해하기
파이썬 함수 이해하기
 
파이썬+함수 데코레이터+이해하기 20160229
파이썬+함수 데코레이터+이해하기 20160229파이썬+함수 데코레이터+이해하기 20160229
파이썬+함수 데코레이터+이해하기 20160229
 
파이썬 프로퍼티 디스크립터 이해하기
파이썬 프로퍼티 디스크립터 이해하기파이썬 프로퍼티 디스크립터 이해하기
파이썬 프로퍼티 디스크립터 이해하기
 
파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기 파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기
 
파이썬 Descriptor이해하기 20160403
파이썬 Descriptor이해하기 20160403파이썬 Descriptor이해하기 20160403
파이썬 Descriptor이해하기 20160403
 
파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기
 
파이썬+클래스+구조+이해하기 20160310
파이썬+클래스+구조+이해하기 20160310파이썬+클래스+구조+이해하기 20160310
파이썬+클래스+구조+이해하기 20160310
 
게임프로그래밍입문 7
게임프로그래밍입문 7게임프로그래밍입문 7
게임프로그래밍입문 7
 
정찬명 - CSS Selectors in HTML [WSConf. Seoul 2016/2017]
정찬명 - CSS Selectors in HTML [WSConf. Seoul 2016/2017]정찬명 - CSS Selectors in HTML [WSConf. Seoul 2016/2017]
정찬명 - CSS Selectors in HTML [WSConf. Seoul 2016/2017]
 
Java 변수자료형
Java 변수자료형Java 변수자료형
Java 변수자료형
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기
 
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
 
파이썬 반복자 생성자 이해하기
파이썬 반복자 생성자 이해하기파이썬 반복자 생성자 이해하기
파이썬 반복자 생성자 이해하기
 
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
 
파이썬 Special method 이해하기
파이썬 Special method 이해하기파이썬 Special method 이해하기
파이썬 Special method 이해하기
 
파이썬 iterator generator 이해하기
파이썬 iterator generator 이해하기파이썬 iterator generator 이해하기
파이썬 iterator generator 이해하기
 
프론트엔드스터디 E03 - Javascript intro.
프론트엔드스터디 E03 - Javascript intro.프론트엔드스터디 E03 - Javascript intro.
프론트엔드스터디 E03 - Javascript intro.
 
파이썬 객체 클래스 이해하기
파이썬  객체 클래스 이해하기파이썬  객체 클래스 이해하기
파이썬 객체 클래스 이해하기
 
파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131
 

Similar to 08장 객체와 클래스 (기본)

C++20 Key Features Summary
C++20 Key Features SummaryC++20 Key Features Summary
C++20 Key Features SummaryChris Ohk
 
09장 객체와 클래스 (고급)
09장 객체와 클래스 (고급)09장 객체와 클래스 (고급)
09장 객체와 클래스 (고급)유석 남
 
Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Yong Joon Moon
 
Swift3 subscript inheritance initialization
Swift3 subscript inheritance initializationSwift3 subscript inheritance initialization
Swift3 subscript inheritance initializationEunjoo Im
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Ryan Park
 
Effective c++ Chapter1,2
Effective c++ Chapter1,2Effective c++ Chapter1,2
Effective c++ Chapter1,2문익 장
 
자바 테스트 자동화
자바 테스트 자동화자바 테스트 자동화
자바 테스트 자동화Sungchul Park
 
Effective c++chapter4
Effective c++chapter4Effective c++chapter4
Effective c++chapter4성연 김
 
Effective C++ Chapter 1 Summary
Effective C++ Chapter 1 SummaryEffective C++ Chapter 1 Summary
Effective C++ Chapter 1 SummarySeungYeonChoi10
 
Ai C#세미나
Ai C#세미나Ai C#세미나
Ai C#세미나Astin Choi
 
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)Suwon Chae
 
More effective c++ chapter1,2
More effective c++ chapter1,2More effective c++ chapter1,2
More effective c++ chapter1,2문익 장
 
Effective c++ 정리 chapter 4
Effective c++ 정리 chapter 4Effective c++ 정리 chapter 4
Effective c++ 정리 chapter 4연우 김
 
Java 강의자료 ed11
Java 강의자료 ed11Java 강의자료 ed11
Java 강의자료 ed11hungrok
 
C++ Advanced 강의 1주차
C++ Advanced 강의 1주차C++ Advanced 강의 1주차
C++ Advanced 강의 1주차HyunJoon Park
 
카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.Ryan Park
 
C++ Template/STL study
C++ Template/STL studyC++ Template/STL study
C++ Template/STL studySeo Dong-yu
 
모어 이펙티브 c++ 5장 스터디
모어 이펙티브 c++ 5장 스터디모어 이펙티브 c++ 5장 스터디
모어 이펙티브 c++ 5장 스터디quxn6
 

Similar to 08장 객체와 클래스 (기본) (20)

C++20 Key Features Summary
C++20 Key Features SummaryC++20 Key Features Summary
C++20 Key Features Summary
 
09장 객체와 클래스 (고급)
09장 객체와 클래스 (고급)09장 객체와 클래스 (고급)
09장 객체와 클래스 (고급)
 
Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713
 
Swift3 subscript inheritance initialization
Swift3 subscript inheritance initializationSwift3 subscript inheritance initialization
Swift3 subscript inheritance initialization
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005
 
Effective c++ Chapter1,2
Effective c++ Chapter1,2Effective c++ Chapter1,2
Effective c++ Chapter1,2
 
C++에서 Objective-C까지
C++에서 Objective-C까지C++에서 Objective-C까지
C++에서 Objective-C까지
 
자바 테스트 자동화
자바 테스트 자동화자바 테스트 자동화
자바 테스트 자동화
 
Effective c++chapter4
Effective c++chapter4Effective c++chapter4
Effective c++chapter4
 
Effective C++ Chapter 1 Summary
Effective C++ Chapter 1 SummaryEffective C++ Chapter 1 Summary
Effective C++ Chapter 1 Summary
 
6 function
6 function6 function
6 function
 
Ai C#세미나
Ai C#세미나Ai C#세미나
Ai C#세미나
 
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
테스트 가능한 소프트웨어 설계와 TDD작성 패턴 (Testable design and TDD)
 
More effective c++ chapter1,2
More effective c++ chapter1,2More effective c++ chapter1,2
More effective c++ chapter1,2
 
Effective c++ 정리 chapter 4
Effective c++ 정리 chapter 4Effective c++ 정리 chapter 4
Effective c++ 정리 chapter 4
 
Java 강의자료 ed11
Java 강의자료 ed11Java 강의자료 ed11
Java 강의자료 ed11
 
C++ Advanced 강의 1주차
C++ Advanced 강의 1주차C++ Advanced 강의 1주차
C++ Advanced 강의 1주차
 
카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.
 
C++ Template/STL study
C++ Template/STL studyC++ Template/STL study
C++ Template/STL study
 
모어 이펙티브 c++ 5장 스터디
모어 이펙티브 c++ 5장 스터디모어 이펙티브 c++ 5장 스터디
모어 이펙티브 c++ 5장 스터디
 

More from 유석 남

02장 Introduction to Java Applications
02장 Introduction to Java Applications02장 Introduction to Java Applications
02장 Introduction to Java Applications유석 남
 
01장 Introduction to Computers and Java
01장 Introduction to Computers and Java01장 Introduction to Computers and Java
01장 Introduction to Computers and Java유석 남
 
14장 - 15장 예외처리, 템플릿
14장 - 15장 예외처리, 템플릿14장 - 15장 예외처리, 템플릿
14장 - 15장 예외처리, 템플릿유석 남
 
13장 연산자 오버로딩
13장 연산자 오버로딩13장 연산자 오버로딩
13장 연산자 오버로딩유석 남
 
12장 상속 (고급)
12장 상속 (고급)12장 상속 (고급)
12장 상속 (고급)유석 남
 
11장 상속
11장 상속11장 상속
11장 상속유석 남
 
10장 문자열 클래스와 파일 클래스
10장 문자열 클래스와 파일 클래스10장 문자열 클래스와 파일 클래스
10장 문자열 클래스와 파일 클래스유석 남
 
05장 논리적 자료표현: 구조체
05장 논리적 자료표현: 구조체05장 논리적 자료표현: 구조체
05장 논리적 자료표현: 구조체유석 남
 
04장 고급변수 사용
04장 고급변수 사용04장 고급변수 사용
04장 고급변수 사용유석 남
 
03장 조건문, 반복문, 네임스페이스
03장 조건문, 반복문, 네임스페이스03장 조건문, 반복문, 네임스페이스
03장 조건문, 반복문, 네임스페이스유석 남
 
[20140624]소개자료
[20140624]소개자료[20140624]소개자료
[20140624]소개자료유석 남
 

More from 유석 남 (13)

02장 Introduction to Java Applications
02장 Introduction to Java Applications02장 Introduction to Java Applications
02장 Introduction to Java Applications
 
01장 Introduction to Computers and Java
01장 Introduction to Computers and Java01장 Introduction to Computers and Java
01장 Introduction to Computers and Java
 
14장 - 15장 예외처리, 템플릿
14장 - 15장 예외처리, 템플릿14장 - 15장 예외처리, 템플릿
14장 - 15장 예외처리, 템플릿
 
13장 연산자 오버로딩
13장 연산자 오버로딩13장 연산자 오버로딩
13장 연산자 오버로딩
 
12장 상속 (고급)
12장 상속 (고급)12장 상속 (고급)
12장 상속 (고급)
 
11장 상속
11장 상속11장 상속
11장 상속
 
10장 문자열 클래스와 파일 클래스
10장 문자열 클래스와 파일 클래스10장 문자열 클래스와 파일 클래스
10장 문자열 클래스와 파일 클래스
 
06장 함수
06장 함수06장 함수
06장 함수
 
05장 논리적 자료표현: 구조체
05장 논리적 자료표현: 구조체05장 논리적 자료표현: 구조체
05장 논리적 자료표현: 구조체
 
04장 고급변수 사용
04장 고급변수 사용04장 고급변수 사용
04장 고급변수 사용
 
03장 조건문, 반복문, 네임스페이스
03장 조건문, 반복문, 네임스페이스03장 조건문, 반복문, 네임스페이스
03장 조건문, 반복문, 네임스페이스
 
[20140624]소개자료
[20140624]소개자료[20140624]소개자료
[20140624]소개자료
 
Example
ExampleExample
Example
 

08장 객체와 클래스 (기본)

  • 2. 차례 • 객체지향 프로그래밍 시작을 위해 • 객체지향 프로그래밍 • 객체지향의 특징 2/20
  • 3. 객체지향 프로그래밍 시작을 위해 • 순차적 프로그래밍 • 구조적 프로그래밍 • 문제를 하향식으로 여러 개의 기능으로 나누어 구현  함수 • 객체지향 프로그래밍 • 사람의 실 세계를 컴퓨터 프로그래밍으로 옮겨놓은 형태로 추상 적 개념이 있고, 실체화된 객체가 프로그램 실행을 담당한다. 3/20
  • 4. 객체지향 프로그래밍 • 문제 분석의 포커스 • 문제를 “누가 무엇으로 어떻게 하는가”의 질문에 맞춰 대답할 수 있어야 함 • 누가  실제 문제를 풀어나가는 주체 : 객체 • 무엇  객체 연산에 필요한 자료 : 멤버 변수 • 어떻게  객체 연산 : 멤버 함수 4/20
  • 5. 객체와 클래스 • 객체와 클래스 • 클래스 : 추상적 개념체 • 객체 : 프로그램의 동작 주체인 실체 클래스 객체 사람 나, 내친구, 옆집아줌마 컵 내가 사용하는 컵, 갑돌이의 컵 자동차 건물 앞에 세워진 자동차, 내 자동차 운동화 내 친구의 하얀색 운동화 • 클래스란 실체인 객체를 만들기 위한 틀!! 5/20
  • 6. 클래스 정의 1 • 프로그램 코드에서의 작성 순서 • 클래스 정의  객체 생성 • 설계에서의 작성 순서 • 문제 분석 객체 식별  클래스 정의 • 클래스 • 멤버변수 : 상태, 처리 대상 등의 정보 • 멤버함수 : 자료 처리 등의 동작을 수행 6/20
  • 7. 클래스 정의 2 • 클래스 선언 class 클래스이름 { 클래스 멤버; //멤버 변수와 멤버 함수 }; 문제 : “하나의 정수를 변수에 저장하고 해당 변수를 화면에 출력하는 프로그램”을 객체지향 프로그래밍으로 작성하기 • 누가  값을 저장하고 출력하는 객체 class IntSample //클래스 이름 • 무엇을  정수 값 { • 어떻게  화면에 출력하기 void ShowScore(); //출력 함수 int Score; //정수 저장할 변수 }; 7/20
  • 8. 클래스 정의 3 • 클래스 멤버 함수 정의 자료형 클래스이름::멤버함수(매개변수) { 함수 내용; • 멤버 함수 정의에서 동일 클래스의 멤버 변수는 직접 접근하여 참 조 가능함 } void IntSample :: ShowScore( ) { cout << “점수 : “ << Score << endl; //Score는 IntSample 멤버변수이므로 별도의 선언 없이 사용 가능함 } 8/20
  • 9. 클래스 정의 4 • 선언된 클래스를 통해 객체 생성 • 생성된 객체는 클래스에 정의된 멤버 변수와 멤버 함수를 참조 • 변수는 “선언한다”  값을 저장하는 공간 • 객체는 “생성한다”  동작하는 실체 9/20
  • 10. 코딩으로 살펴본 클래스와 객체 일반 자료형 구조체 클래스 정의 형태 이미 정의되어 있음 사용자가 구조체형을 정의 사용자가 클래스를 정의 내용 int, float, double, char 등 여러 자료형 멤버를 포함할 수 있음 여러 자료형 멤버 + 여 러 기능을 갖는 함수 사용 형태 자료형의 변수를 선언 자료형 변수이름; 예) int a; 정의한 구조체형 변수 선언 구조체형 변수이름; 예) typedef struct { char name[30]; int age; } PERSON; PERSON b; 정의한 클래스의 객체 생성 클래스이름 객체이름; 예) class SamClass { …………. }; SamClass obj; 비고 변수 하나에 하나의 자 료 저장 하나의 변수에 각 멤버 별로 자료 저 장 자료를 저장할 수 있는 변수와 기능을 수행하는 함수가 포함됨 10/20
  • 11. 멤버 접근 속성 • 클래스 멤버의 접근 속성 • private : 기본 접근 속성, 같은 클래스 멤버 내에서만 접근 허용 • protected : 클래스 상속에서 사용됨 • public : 모든 위치에서 접근 허용 • 클래스 멤버 참조 연산자 • 점(.) 11/20
  • 12. #include <iostream> using namespace std; class IntSample { void ShowScore(); int Score; }; void IntSample::ShowScore() { cout << "점수: " << Score << endl; } int main() { 멤버 접근속성을 명시하지 않으면 private로 간주됨!!!! ShowScore( ) 멤버 함수는 Score와 동일한 IntSample 클래스의 멤버이 므로 멤버 변수를 직접 참조 가능함!! IntSample Obj; //객체 생성 Obj.Score=100; //객체 Obj의 멤버 변수 Score에 값 할당하기  에러 Obj.ShowScore(); //객체 Obj의 멤버 함수 ShowScore() 호출하기  에러 return 0; } 클래스 선언 클래스 멤버 함수 정의 main( ) 함수는 IntSample 클래스 내 가 아닌 클래스 밖이므로 해당 멤버에 직접 참조할 수 없음!!! 에러 메시지 : error C2248: 'IntSample::Score': private 멤버('IntSample' 클래스에서 선언)에 액세스할 수 없습니다. error C2248: 'IntSample::ShowScore': private 멤버('IntSample' 클래스에서 선언)에 액세스할 수 12/20 없습니 다.
  • 13. 일반적으로 정의되는 형태:멤버 접근 속성 • 기본 멤버 접근 속성이 private인 이유 • 생성된 객체 정보는 접근 권한이 있는 경우에만 참조케 함을 목적 으로 함  보안성 고려 • private 멤버는 public 멤버 함수를 통해 접근토록 클래스를 설계 함  직접적 접근 허용 방지 • 일반적으로 멤버 변수는 private, 멤버 함수는 public으로 하며, 클래스 선언에서 멤버 접근 속성이 public  protected  private 순으로 코딩 13/20
  • 14. #include <iostream> using namespace std; class IntSample { public : void ShowScore(); void setScore(const int s); int getScore(); private : int Score; }; void IntSample::ShowScore() { cout << "점수: " << Score << endl; } void IntSample::setScore(const int s) { Score=s; } int IntSample::getScore() { return Score; } int main() { IntSample Obj; Obj.setScore(100); cout << "점수: " << Obj.getScore() << endl; return 0; } 14/20
  • 15. 프로그램 코딩에서 • 클래스 선언은 헤더 파일, 정의는 소스 파일 • 객체 생성 및 테스트는 main( ) 함수에서 실행 //IntSample.h #ifndef _INTSAMPLE_H_ #define _INTSAMPLE_H_ #include <iostream> using namespace std; class IntSample { public : void ShowScore(); void setScore(const int s); int getScore(); private : int Score; }; #else #endif //IntSample.cpp #include "IntSample.h" void IntSample::ShowScore() { cout << "점수: " << Score << endl; } void IntSample::setScore(const int s) { Score=s; } int IntSample::getScore() { return Score; } //IntSample_main.cpp #include "IntSample.h" int main() { IntSample Obj; Obj.setScore(100); cout << "점수: " << Obj.getScore() << endl; return 0; } 15/20
  • 16. 실습 1 문제 : 키와 몸무게를 입력받아 표준 몸무게를 계산하여 “저체중”, “정상체중”, “과체중”인가를 표시하자. 문제를 “누가 무엇을 가지고 어떻게 동작하는가”의 시각으로 바라보자. 먼저 생성될 객체의 작업 대상인 “무엇”을 식별해 보자. 작업 대상이 되는 항목은 키와 몸무게 이다. 그리고 어떻게 동작하는가는 먼저 키와 몸무게를 외부에서 동작하는 객체에 전달받을 수 있어야 하 고, 키를 이용해서 표준 몸무게를 계산할 수 있어야 한다. 또한 표준 몸무게와 전달받은 몸무게를 비 교하여 체중의 상태를 판단해서 객체 밖으로 전달할 수 있어야 한다. 멤버 변수 • 키 : 소수점 이하 자리를 다룰 수 있도록 배정도형으로 하자. • 몸무게 : 소수점 이하 자리를 다룰 수 있도록 배정도형으로 하자. • 체중 상태 : 체중 상태는 표준 몸무게 계산 후 일정한 처리에 의해 산출되 는 정보로써 표준 몸무게 자체를 멤버 변수로 해도 된다. 그러나 이번에는 체중 상태를 멤버 변수로 하겠다. -1은 저체중을, 0은 정상체중, 1은 과체중 으로 표시하자. double height, weight; int WeightStatus; 16/20
  • 17. 멤버 함수 • 키를 외부에서 객체로 전달하는 기능 : 매개변수로 키 값을 전달받음 • 몸무게를 외부에서 객체로 전달하는 기능 : 매개변수로 몸무게를 전달받음 • 키를 객체 외부로 전달하는 기능 : 함수의 반환값으로 외부에 전달함 • 몸무게를 객체 외부로 전달하는 기능 : 함수의 반환값으로 외부에 전달함 • 표준 몸무게 산출해서 체중 상태를 구하는 기능 • 체중 상태를 객체 외부로 전달하는 기능 : 함수의 반환값으로 외부에 전달함 void setHeight(const double h); void setWeight(const double w); double getHeight(); double getWeight(); int StdWeight(); int getWeightStatus(); 소스 8-1 (ch08_weight.h) 소스 8-2 (ch08_weight.cpp) 소스 8-3 (ch08_01.cpp) 17/20
  • 18. 실습 2 문제 : 다음은 수업에 등록한 학생을 관리하는 클래스이다. 주어진 상황에 맞게 클래스를 선언, 정의해서 테스트 해보자. 출력 형태 : 과정명 입력 : C++ 프로그램 수강학생 이름 입력 : 이름 : 박진영 계속입력하시겠습니까? (y/n) y 이름 : 김동현 계속입력하시겠습니까? (y/n) y 이름 : 김소연 계속입력하시겠습니까? (y/n) y 이름 : 김창민 계속입력하시겠습니까? (y/n) y 이름 : 황청자 계속입력하시겠습니까? (y/n) n 수강학생 명단 : 박진영 김동현 김소연 김창민 황청자 총 수강학생 수 : 5명 18/20
  • 19. 누가  수업에 등록한 학생 관리 객체 무엇을  과정명, 수업에 등록한 학생 명단, 수업에 등록한 총 학생 수 어떻게  과정명을 외부에서 전달받아 저장, 수강생 이름을 외부에서 전달받아 수강생 목록에 저장, 수강생 목록에 총 수 계산, 수강생 목록을 외부에 전달하기, 총 수강생 수를 외부에 전달하기 클래스 이름 : Course 멤버 변수 •과정명 •수강학생 명단 •총 수강학생 수 멤버 함수 •과정명을 객체 내부로 전달하는 함수 •한 명의 수강학생 이름을 객체 내부로 전달하는 함수 •수강학생 이름 전체를 객체 외부로 전달하는 함수 •총 수강학생 수를 객체 외부로 전달하는 함수 소스 8-4 (ch08_course.h) 소스 8-5 (ch08_course.cpp) 소스 8-6 (ch08_02.cpp) 19/20
  • 20. 객체지향의 특징 • 추상화 (Abstraction) • 캡슐화 (Encapsulation) • 상속 (Inheritance) • 다형성 (Polymorphism) 20/20