10장 객체-지향 프로그래밍 I ©창병모.

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

SCJP. Garbage Collection  Garbage Collector( 이하 GC) 가 Heap 영역 에 할당된, 더 이상 사용되지 않는 메모리인 Garbage 를 다른 객체가 사용할 수 있도록 정리하는 것.  C++ 에서의 메모리 해제 int* v=new.
5. 접근 제한자의 이해 SCJP 자격증 프로젝트 발표자 : 노효진.
01_ 가상 함수를 사용한 다형성의 구현 02_ 오버라이딩
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
Chap07 상속 Section 1 : 상속의 개요 Section 2 : 멤버 변수의 상속
객체지향 프로그래밍.
최윤정 Java 프로그래밍 클래스 상속 최윤정
5장. 객체지향과 클래스.
Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스
3장 객체-지향 프로그래밍 언어.
제 9 장 구조체와 공용체.
컴퓨터 프로그래밍 기초 [Final] 기말고사
제9장 추상 데이터 타입 및 모듈 (Abstract Data Type & Module)
1학기 Java 요약.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
5장. 참조 타입.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
6장. 클래스.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
Java 6장. 클래스 : 속성 public class SumTest {
Lesson 7. 클래스와 메소드 - 1.
컴퓨터 프로그래밍 실습 #6 제 4 장 클래스 작성.
자바 5.0 프로그래밍.
Choi, Namseok Java 기초 (객체와 클래스) Choi, Namseok
C#.
6장 클래스 6.1 클래스의 일반 구조 6.2 클래스 선언 6.3 객체의 생성 6.4 멤버 변수 6.5 멤버변수 접근 한정자
제1장 서론.
4 장 클래스 작성.
[INA470] Java Programming Youn-Hee Han
13. 연산자 오버로딩.
7장 인터페이스와 추상 클래스.
Method & library.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
제 4장. 객체 지향 프로그래밍 시작하기 학기 프로그래밍언어및실습 (C++).
Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 쪽)
자바 5.0 프로그래밍.
자바 가상 머신 프로그래밍 Chap 10. 자바 컴파일링의 안쪽 ② Pslab 오민경.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
Power Java 제11장 상속.
JA A V W. 06.
Fucntion 요약.
12. 상속 : 고급.
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
Lecture 04 객체지향 페러다임 Kwang-Man Ko
3. 모듈 (5장. 모듈).
Chapter 4 클래스 작성.
발표자 : 이지연 Programming Systems Lab.
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
Numerical Analysis Programming using NRs
Chapter 11 구조체.
Static과 const 선언 조 병 규 한 국 교 통 대 학 교 SQ Lab..
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 05. 복사 생성자.
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
자바 객체 지향 프로그래밍 Ps lab 김윤경.
OOP Practices OOP presentation 6 작성자 Kimjinsik 소속 Mobile computing Lab
상속 (Inheritance) private 전용부분 전용부분 공용부분 공용부분 public 기본 클래스
Pointers summary.
7 생성자 함수.
Presentation transcript:

10장 객체-지향 프로그래밍 I ©창병모

10.1 객체-지향 개념 ©창병모

객체 지향 : 동기 프로그램에서 실세계 객체들을 시뮬레이션 ©창병모

객체 객체 예: 은행 계좌 상태 – 객체에 대한 데이터 행동- 할(될) 수 있는 연산 혹은 동작 계좌 번호 현재 잔액 입금 행동- 할(될) 수 있는 연산 혹은 동작 예: 은행 계좌 계좌 번호 현재 잔액 입금 출금 ©창병모

객체와 클래스 객 체 클래스 Class = 객체의 정의 혹은 타입 프로그램 객 체 Object = 데이터 + 관련 연산들(메쏘드 혹은 동작들) 클래스 Class = 객체의 정의 혹은 타입 (a type of Objects) 프로그램 Program = 클래스들의 집합 Program 실행 = 서로 상호작용하는 객체들의 집합 (a set of objects invoking each other methods) ©창병모

클래스 객체에 대한 정의 클래스는 객체에 대한 타입 실체화(Instantiation) 데이터(필드 변수) 정의 데이터(필드 변수) 정의 관련 연산(메쏘드) 정의 클래스는 객체에 대한 타입 객체는 어떤 클래스 타입으로 선언 객체는 어떤 클래스의 실체(instance)이다. 실체화(Instantiation) 클래스로부터 객체를 생성하는 것 new in Java, C++ ©창병모

클래스의 예 Java의 클래스 필드 변수 정의 메쏘드 정의 C++의 클래스 데이터 멤버 정의 멤버 함수 정의 ©창병모

10.3 Java 객체 및 클래스 ©창병모

J2ME (Java 2 Micro Edition) Servers Workstations PCs Thin Clients Battery Powered Card HotSpot JVM KVM Card VM Java Classes Smart Card Profile CDC Foundation Class TV Screen Phone Car CLDC Core Class MIDP Kitty- Hawk DojaP J2EE J2SE J2ME (Java 2 Micro Edition) Embedded Space CVM ©창병모

(Method declarations) 클래스 정의 클래스는 데이터 선언과 메소드 선언을 포함한다. int account_number; double balance; 데이터 선언들 (Data declarations) 메쏘드 선언들 (Method declarations) ©창병모

클래스 정의 클래스 정의 구문 변수, 구성자, 메쏘드를 클래스의 멤버라고 한다. class class-name { 필드 변수 선언 구성자 선언 메쏘드 선언 } 변수, 구성자, 메쏘드를 클래스의 멤버라고 한다. ©창병모

클래스 정의: 예 class Account { int account_number; double balance; Account (int account, double initial) { account_number = account; balance = initial; } // constructor Account void deposit (double amount) { balance = balance + amount; } // method deposit } // class Account ©창병모

객체 생성 new 연산자는 클래스로부터 객체를 생성한다. Account saving = new Account (); saving는 Account 객체를 참조하는 변수 new 연산자에 의해 생성된 객체로 초기화됨. 생성된 객체에 대해 구성자를 호출하여 set-up한다. ©창병모

클래스와 객체 생성 클래스로부터 객체 생성(instantiation) 객체 실체 변수(instance variable) 각 객체를 위한 기억공간이 할당됨 어디에? 객체 클래스의 실체 (an instance of a class) 실체 변수(instance variable) 클래스 내에 정의된 변수로 각 객체마다 기억공간이 할당됨 한 클래스의 모든 객체들은 메쏘드를 공유 ©창병모

클래스 및 객체 Objects Class new new account_number 2908371 balance 573.21 int account_number double balance account_number balance new 4113787 9211.84 ©창병모

구성자(Constructors) Account savings = new Account (1,125.89); 구성자 특별한 메쏘드로 생성된 객체를 set up하는데 사용된다. 보통 변수를 초기화한다. 클래스와 이름이 같다 반환 값이 없으며 반환 타입도 없다. 클래스의 구성자를 꼭 정의해야 하는 것은 아니다. Account 구성자는 초기값을 받아서 초기화한다. Account savings = new Account (1,125.89); ©창병모

객체 참조 변수 객체 참조 변수 선언 및 객체 생성 객체가 존재하면 메쏘드 호출 가능 (점 연산자 이용) Account savings; savings = new Account (1, 125.89); 객체가 존재하면 메쏘드 호출 가능 (점 연산자 이용) savings.deposit (35.00); ©창병모

객체 참조 객체 참조는 객체의 주소를 갖는다. 객체에 대한 모든 상호 작용은 객체 참조 변수를 통해 서 일어난다. Chess_Piece bishop1 = new Chess_Piece(); 객체에 대한 모든 상호 작용은 객체 참조 변수를 통해 서 일어난다. bishop1 ©창병모

참조 배정 객체 참조 변수의 경우, 객체의 주소가 배정된다. bishop2 = bishop1; 전 후 bishop1 ©창병모

10.4 메쏘드 선언과 사용 ©창병모

메쏘드 선언 char calc (int num1, int num2, String message) 메쏘드 이름 매개변수 리스트 매개변수 리스트는 매개변수 타입과 이름을 나열한다. 선언된 매개변수를 형식 매개변수라고 한다. 반환 타입 ©창병모

메쏘드 선언 메쏘드 헤더 다음에 메쏘드 몸체가 나온다. char calc (int num1, int num2, String message) { int sum = num1 + num2; char result = message.charAt(sum); return result; } 반환 식은 반환 타입과 일치해야 한다. sum과 result는 지역 변수로 메쏘드가 호출될 때마다 생성되고 반환될 때 제거된다. ©창병모

return 문 메쏘드의 반환 타입은 메쏘드가 반환하는 값의 타입을 의미한다. Return 문은 반환될 값을 명시한다. 반환 값은 반환 타입과 일치해야 한다. 값을 반환하지 않는 메쏘드는 반환 타입이 void이다. ©창병모

매개변수 메쏘드가 호출될 때 실 매개변수(actual arguments) 값은 형식 매 개변수에 복사된다. char calc (int num1, int num2, String message) { int sum = num1 + num2; char result = message.charAt (sum); return result; } ch = obj.calc (25, count, "Hello"); 실 매개변수(actual parameters) 형식 매개변수(fomal parameters) ©창병모

메소드 제어 흐름 obj.doIt(); main doIt helpMe helpMe(); 다른 클래스 ©창병모

Java에서 매개 변수 전달 매개변수를 전달할 때 실 매개변수 값이 형식 매개변수 에 전달(복사)된다. 기초 타입 전달 값 전달(pass by value) 값이 복사되어 전달된다. 객체 참조 전달 참조 전달(pass by reference) 형식 매개변수는 실 매개변수와 이명이 되며 형식 매개변수와 실 매개변수는 같은 객체를 참조한다. ©창병모

메소드 중복정의(overloading) 한 클래스 내에 동일한 이름을 갖는 여러 개의 메쏘드 이름은 같지만 내부적으로 다른 작업을 수행하는 여러 개의 메소드 메소드 이름은 동일하지만 매개변수 개수, 순서 타입 등은 달라야 함 메쏘드의 서명(signature) 메쏘드 이름, 매개변수의 개수, 순서, 타입 컴파일러가 서명을 이용해서 구분해서 컴파일 메소드 이름이 동일하고 서명도 동일하다면 컴파일 오류 발생 메소드의 리턴 타입은 서명에 포함되지 않음 ©창병모

메소드 중복정의:예 class Overloading { public void say() { System.out.println("Hello ?"); } public void say(String msg) { System.out.println(msg); public void say(String msg, int n) { for(int i =0; i < n; i++) { public static void main(String args[]) { Overloading a = new Overloading(); a.say(); a.say("How are you ?"); a.say("I am fine.", 3); ... ©창병모

구성자 중복정의:예 구성자를 중복정의하는 경우 Account (int account) { account_number = account; balance = 0.0; } // constructor Account Account (int account, double initial) { balance = initial; } // constructor Account ©창병모

10.5 C++ 객체 및 클래스 ©창병모

C++ 클래스 C의 struct C++의 Class 데이터(변수)들의 모음에 대한 타입 데이터 멤버와 멤버 함수들의 모음에 대한 타입 클래스는 변수를 선언하고 객체를 생성하는데 사용. ©창병모

C++ 객체 클래스의 실체(instance) s는 Stack의 객체를 위한 변수 Stack s; ©창병모

C++ 예 class Stack { public: char pop(); void push(char); Stack() { top = 0;} private: int top; char elements[101]; }; ©창병모

C++ 예 char Stack::pop() { top = top -1; return elements[top+1]; } char Stack::push(char c) { top = top +1; elements[top] = c; #include <stdio.h> main() { Stack s; s.push('!'); s.push('@'); s.push('#'); printf("%c %c %c \n", s.pop(), s.pop(), s.pop()); ©창병모

Members 데이터 멤버(Data members) 멤버 함수(Member functions) 클래스 내에 선언된 변수들 top, elements 멤버 함수(Member functions) 클래스 내에 선언된 함수들 push(), pop(), Stack() ©창병모

구성자/소멸자 구성자(Constructor) 소멸자(Destructor) 초기화 등을 위한 특별한 멤버 함수 객체가 생성될 때 자동 실행 Stack( ) 소멸자(Destructor) 청소를 위한 자동 멤버 함수 객체가 제거될 때 자동 실행 ~Stack( ) ©창병모

C++에서 동적 할당 new T delete p T 타입의 객체 생성 새로 생성된 객체에 대한 포인터 반환 ©창병모

객체에 대한 포인터 Stack 객체를 가리키는 포인터 변수 포인터 변수 사용 this Stack *p; p = new Stack( ); 포인터 변수 사용 (*p).push() == p->push() this 멤버 함수 내에서 자신(대상) 객체를 가리키는데 사용됨 호출 대상(target) 객체 ©창병모

구성자/소멸자: 예 class Stack { public: char pop(); void push(char); Stack(int); ~Stack(); private: int top; int size; char *elements; }; ©창병모

구성자/소멸자: 예 Stack::Stack(int n) { size = n; elements = new char[size]; top = 0; } Stack::~Stack() { delete elements; ©창병모

10.6 가시성 조정자 (Visibility Modifiers) ©창병모

캡슐화(Encapsulation) 캡슐화가 왜 필요한가? 외부 관점에서 본 객체 객체는 자기 관리되어야 한다. 객체는 하나의 캡슐로 서비스(즉 객체에 대한 창구)를 제공한다. 객체는 자기 관리되어야 한다. 객체의 상태는 메쏘드에 의해서 변경되어야 한다. 다른 객체가 접근하여 상태를 바꾸는 것을 어렵게 해야 한다. ©창병모

캡슐화(Encapsulation) 클라이언트 캡슐화된 객체는 블랙 박스로 생각할 수 있다. 객체의 사용자는 메쏘드 데이터 서비스를 요청할 수 있으나 서비스의 구현에 대해서는 알 수 없어야 한다. 메쏘드 데이터 클라이언트 ©창병모

캡슐화 예 savings deposit withdraw add_interest 클라이언트 produce_statement ©창병모

가시성 조정자: Java 가시성 조정자를 사용하여 캡슐의 가시성을 조정한다. 클래스 사용자는 멤버 함수 정의만 보면 된다. 캡슐화를 위해 오류의 지역화를 위해 클래스 사용자는 멤버 함수 정의만 보면 된다. ©창병모

가시성 조정자 public private package protected 멤버 필드와 메소드는 클래스의 내외 어느 곳에서나 접근이 가능 private 클래스 내부에서만 접근 가능 package package 혹은 default는 아무 것도 기술하지 않았을 때 같은 패키지 내에서는 자유롭게 접근할 수 있으나, 패키지 외부에서는 접근할 수 없다. protected 같은 패키지 내에 있는 클래스들은 모두 접근 가능 다른 패키지의 클래스들은 이 클래스로부터 상속 받은 경우에만 접근 가능 ©창병모

패키지 관련된 클래스들의 모임 package package_name; 패키지 참조 패키지를 만들기 위해서 파일의 처음 부분에 다음 문장을 기술한다. package package_name; package 문장을 사용하지 않는 경우: 디폴트 패키지에 속함. 패키지 참조 패키지 내에서 클래스들은 서로 자유롭게 다른 클래스들을 참조 다른 패키지 참조는 아래와 같이 한다. import package_name.class_name; 패키지 경로는 클래스 파일의 디렉토리 경로와 같다. 예) java.awt.Graphics --> java/awt/Graphics ©창병모

가시성 조정자 패키지 내부에서 접근 패키지 외부에서 접근 ©창병모

가시성 조정자 일반적 규칙 공용 메쏘드 지원 메쏘드 객체의 데이터는 공용으로 선언하면 안된다. 객체의 서비스(창구)를 제공하는 메쏘드로 서비스 메쏘드라고도 한다. 지원 메쏘드 서비스 메쏘드를 지원하는 메쏘드로 공용이 아니다. ©창병모

가시성 조정자: C++ 공용 멤버(public members) 전용 멤버(private members) 클래스 밖에서 접근 가능 전용 멤버(private members) 선언된 클래스 내에서만 접근 가능 보호 멤버(protected members) 상속을 제외하면 전용 멤버와 같다. 자손 클래스들에서 접근 가능 ©창병모