17장 클래스와 메소드

Similar documents
8장 문자열

쉽게 풀어쓴 C 프로그래밍

3장 함수

PowerPoint Presentation

14장 파일

Microsoft PowerPoint - C++ 5 .pptx

슬라이드 1

gnu-lee-oop-kor-lec06-3-chap7

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

쉽게 풀어쓴 C 프로그래밍

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

PowerPoint Presentation

금오공대 컴퓨터공학전공 강의자료

10장 리스트

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

4. #include <stdio.h> #include <stdlib.h> int main() { functiona(); } void functiona() { printf("hihi\n"); } warning: conflicting types for functiona

쉽게

PowerPoint Presentation

Design Issues

JAVA PROGRAMMING 실습 08.다형성

단순 베이즈 분류기

Microsoft PowerPoint - [2009] 02.pptx

11장 포인터

Microsoft PowerPoint - additional01.ppt [호환 모드]

쉽게 풀어쓴 C 프로그래밍

PowerPoint 프레젠테이션

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

PowerPoint Template

설계란 무엇인가?

PowerPoint Presentation

Microsoft PowerPoint - Chap12-OOP.ppt

확률 및 분포

JAVA PROGRAMMING 실습 05. 객체의 활용

PowerPoint Presentation

PowerPoint Presentation

C 언어 프로그래밊 과제 풀이

Microsoft PowerPoint - additional08.ppt [호환 모드]

쉽게 풀어쓴 C 프로그래밍

ThisJava ..

1106 학원과정

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

기술통계

PowerPoint Presentation

No Slide Title

282서비스업관리-마트

PowerPoint Presentation

PowerPoint 프레젠테이션

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

Microsoft PowerPoint - ch07 - 포인터 pm0415

설계란 무엇인가?

Microsoft PowerPoint 장강의노트.ppt

C++ Programming

슬라이드 1

No Slide Title

PowerPoint Template

JUNIT 실습및발표

PowerPoint Presentation


untitled

COVER.HWP

이슈분석 2000 Vol.1

가볍게읽는-내지-1-2

kbs_thesis.hwp


한눈에-아세안 내지-1

PowerPoint 프레젠테이션

class Sale void makelineitem(productspecification* spec, int qty) SalesLineItem* sl = new SalesLineItem(spec, qty); ; 2. 아래의액티비티다이어그램을보고 Java 또는 C ++,

C++ Programming

Microsoft PowerPoint - 2강

Data Structure

(Microsoft Word - \301\337\260\243\260\355\273\347.docx)

Microsoft PowerPoint - Chapter 6.ppt

Microsoft PowerPoint - web-part02-ch15-문서객체조작.pptx

Microsoft PowerPoint 세션.ppt

Microsoft PowerPoint - additional03.ppt [호환 모드]

슬라이드 1

PowerPoint Presentation

1. 클래스와배열 int 형배열선언및초기화 int ary[5] = 1, 2, 3, 4, 5 ; for (int i = 0; i < 5; i++) cout << "ary[" << i << "] = " << ary[i] << endl; 5 장클래스의활용 1

쉽게 풀어쓴 C 프로그래밍

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

Microsoft PowerPoint - Java7.pptx

PowerPoint Presentation

tkinter를 이용한 계산기 구현

JVM 메모리구조

Microsoft PowerPoint - chap06-2pointer.ppt


PowerPoint Presentation

4 장클래스와객체 클래스와객체 public과 private 구조체와클래스객체의생성과생성자객체의소멸과소멸자생성자와소멸자의호출순서디폴트생성자와디폴트소멸자멤버초기화멤버함수의외부정의멤버함수의인라인함수선언 C++ 프로그래밍입문

Microsoft Word - FunctionCall

PowerPoint 프레젠테이션

Microsoft PowerPoint - 제11장 포인터(강의)

- 목차 - - ios 개발환경및유의사항. - 플랫폼 ios Project. - Native Controller와플랫폼화면연동. - 플랫폼 Web(js)-Native 간데이터공유. - 플랫폼확장 WN Interface 함수개발. - Network Manager clas

adfasdfasfdasfasfadf

PowerPoint Presentation

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밍

Transcription:

17 장클래스와메소드 박창이 서울시립대학교통계학과 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 1 / 18

학습내용 객체지향특징들객체출력 init 메소드 str 메소드연산자재정의타입기반의버전다형성 (polymorphism) 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 2 / 18

객체지향특징들 객체지향프로그래밍의특징 프로그램은객체와함수정의로구성되며대부분의계산은객체에대한연산으로표현됨객체의정의는 Time 처럼어떤객체나현실의개념에대응됨. 객체에대한함수는 Time 에대한함수들처럼현실에서일어나는일에대응됨 메소드는특정클래스와관련된함수로볼수있으며함수와다음과같은차이가있음 메소드는클래스와의관계를명확히하기위해클래스정의안에서정의됨메소드호출방법은함수호출문법과는다름 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 3 / 18

객체출력 I Time 클래스에대한출력메소드 >>> class Time(object): def print_time(self): print( %.2d:%.2d:%.2d % (self.hour, self.minute, self.second)) >>> start = Time() >>> start.hour = 9 >>> start.minute = 45 >>> start.second = 00 >>> Time.print_time(start) 09:45:00 >>> start.print_time() 09:45:00 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 4 / 18

객체출력 II 메소드의첫파라미터는흔히 self 라불림 print time(start) 는 print time 에게출력할객체를주며 start.print time() 은 start 에게자기자신을프린트하도록함. 즉책임을함수에서객체로옮김 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 5 / 18

init 메소드 I 값초기화 >>> class Time(object): def print_time(self): print( %.2d:%.2d:%.2d % (self.hour, self.minute, self.second)) def init (self, hour=0, minute=0, second=0): self.hour = hour self.minute = minute self.second = second >>> time = Time() >>> time.print_time() 00:00:00 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 6 / 18

init 메소드 II >>> time = Time(9) >>> time.print_time() 09:00:00 >>> time = Time(9, 45) >>> time.print_time() 09:45:00 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 7 / 18

str 메소드 I 문자열로변환 >>> class Time(object): def init (self, hour=0, minute=0, second=0): self.hour = hour self.minute = minute self.second = second def str (self): return %.2d:%.2d:%.2d % (self.hour, self.minute, self.second) >>> time = Time(9, 45) >>> print(time) 09:45:00 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 8 / 18

연산자재정의 I add 메소드를이용하여 Time 객체들간의 + 연산정의 def int_to_time(seconds): minutes, second = divmod(seconds, 60) hour, minute = divmod(minutes, 60) time = Time(hour, minute, second) return time >>> class Time(object): def init (self, hour=0, minute=0, second=0): self.hour = hour self.minute = minute self.second = second def str (self): 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 9 / 18

연산자재정의 II return %.2d:%.2d:%.2d % (self.hour, self.minute, self.second) def time_to_int(self): minutes = self.hour * 60 + self.minute seconds = minutes * 60 + self.second return seconds def add (self, other): seconds = self.time_to_int() + other.time_to_int() return int_to_time(seconds) >>> start = Time(9, 45) >>> duration = Time(1, 35) >>> print(start+duration) 11:20:00 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 10 / 18

타입기반버전 I other 가 Time 객체인경우 add time, 정수인경우 increment 를호출 >>> class Time(object): def init (self, hour=0, minute=0, second=0): self.hour = hour self.minute = minute self.second = second def str (self): return %.2d:%.2d:%.2d % (self.hour, self.minute, self.second) def time_to_int(self): minutes = self.hour * 60 + self.minute seconds = minutes * 60 + self.second return seconds 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 11 / 18

타입기반버전 II def add (self, other): if isinstance(other, Time): return self.add_time(other) else: return self.increment(other) def add_time(self, other): seconds = self.time_to_int() + other.time_to_int() return int_to_time(seconds) def increment(self, seconds): seconds += self.time_to_int() return int_to_time(seconds) 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 12 / 18

타입기반버전 III >>> start = Time(9, 45) >>> duration = Time(1, 35) >>> print(start+duration) 11:20:00 >>> print(start+1337) 10:07:17 1337+start 의경우오류가발생 >>> print(1337+start) Traceback (most recent call last): File "<pyshell#92>", line 1, in <module> print(1337+start) TypeError: unsupported operand type(s) for +: int and Time 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 13 / 18

타입기반버전 IV 이경우 radd 를 Time 클래스내에정의하면됨 def radd (self, other): return self. add (other) 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 14 / 18

다형성 I 여러가지타입의인자에대하여작동하는함수를다형함수라하며코드재사용을쉽게함 원소가해쉬가능하면리스트, 튜플, 사전등에대해서모두작동 >>> def histogram(s): d = dict() for c in s: if c not in d: d[c] = 1 else: d[c] = d[c] + 1 return d >>> t = [ spam, egg, spam, spam, bacon, spam ] >>> histogram(t) { spam : 4, egg : 1, bacon : 1} 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 15 / 18

다형성 II Time 객체에대한 sum 의경우 TypeError: unsupported operand type(s) for +: int and Time 과같은오류가발생 def radd (self, other): if other == 0: return self else: return self. add (other) 로정의하면됨. >>> t1 = Time(7, 43) >>> t2 = Time(7, 41) >>> t3 = Time(7, 37) >>> total = sum([t1, t2, t3]) >>> print(total) 23:01:00 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 16 / 18

디버깅 I hasattr 이외에 dict 속성을이용하여객체의속성에접근 >>> class Point(object): def init (self, x=0, y=0): self.x = x self.y = y >>> p = Point(3, 4) >>> print(p. dict ) { x : 3, y : 4} 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 17 / 18

디버깅 II print attributes 함수를사용하면편리 >>> def print_attributes(obj): for attr in obj. dict : print(attr, getattr(obj, attr)) >>> print_attributes(p) x 3 y 4 내장함수 getattr 은객체와속성이름을받아객체의값을반환 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 18 / 18