상속.

Slides:



Advertisements
Similar presentations
내 마음의 버 스 이천신하교회 청년부. 이름 : 한상훈 나이 : 30 살 종교 : 기독교 ( 모태신앙 ) 생활신조 : 인생은 한방 ! 로또나 사자 이상형 : 청순 가련한 모태미녀 특이사항 : 걸그룹 노래에 환장함 식스팩을 갖기엔 슬픈 몸을 타고 남.
Advertisements

독서골든벨 2009 학년도 6 학년 1 학기 6-10 반. 1. 이야기 삼국유사 정대한 원효대사는 수행을 위해 떠나던 중 피곤하여 숲 속에서 잠이 들었다. 잠결에 너무 목이 마른 나머지 어디에 담겨있는 물을 맛있게 마셨나요 ?
두 손 들고 두 손 들고 찬양합니다 두 손 들고 찬양합니다 다시 오실 왕 여호와께 다시 오실 왕 여호와께 두 손 들고 찬양합니다 두 손 들고 찬양합니다 다시 오실 왕 여호와께 다시 오실 왕 여호와께 오직 주만이 나를 다스리네 오직 주만이 나를 다스리네 나 주님만을.
지금은 기도 하는 시간입니다 1. 송구영신예배를 위해서 2. ‘크리스마스 이브’ 행사를 준비하는 교육 기관을 위하여
Kim Yeon Hee 8장. 상속과 다형성 Kim Yeon Hee.
1. 기관별 맞춤형 집중교육 : 실습 및 개인별 집중지도    1. 기관별 맞춤형 집중교육 : 실습 및 개인별 집중지도 (상설) 기관별 맞춤형 교육 - 당 교육기관에서.
Efl을 이용한 타이젠 네이티브 웨어러블 앱 만들기
Objective-C Basic 1.
Objective-C Basic 1.
2장 닷넷 프레임워크.
2016 ITA 1월 강의 C Programming -4일차- 포인터배열 및 이중포인터 정대진 ( )
현대사회의 여성문제와 여성복지 3조 권경욱 강향원 황대인 변갑수 박창욱 김지현.
제 8 장  파서 생성기 YACC 사용하기.
명품 JAVA Programming.
10장 객체-지향 프로그래밍 II ©창병모.
6 프로세스 생성과 실행.
버퍼 오버플로우에 대한 대책과 발전된 공격 안전한 함수 사용 버퍼 오버플로우에 취약한 함수 사용하지 않기
JAVA 프로그래밍 6장 객체지향프로그래밍의 핵심.
객체지향 언어와 클래스, 객체 ㅎㅎ 개요 클래스의 선언, 객체의 생성 및 속성 참조 방식 멤버 변수 메소드 한빛미디어(주)
배열, 포인터, 참조 배열은 같은 형을 가지는 변수들의 묶음이다..
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 14. 포인터와 함수에 대한 이해.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 02. 프로그램의 기본구성.
2장 자바환경과 자바 프로그램 2.1 자바 개발 환경 2.2 자바 통합환경 2.3 자바 응용 프로그램과 애플릿 프로그램
Chapter 05. 클래스 완성. chapter 05. 클래스 완성 01. 복사 생성자 복사 생성(Copy Construction) 생성될 때 자신과 같은 타입의 객체를 변수로 받아, 이 객체와 같은 값을 갖는 새로운 객체를 생성하는 것 명시적인 생성 과정뿐만.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express.
DataScience Lab. 박사과정 김희찬 (월)
C ++ 프로그래밍 시작.
JSP와 자바 빈즈 JSP 빈즈 구조를 이해하고 활용한다. useBean 액션 활용법을 익힌다.
This, static, final 지정 예약어 자바 4대 중첩 클래스
C++ 개요 객체지향 윈도우즈 프로그래밍 한국성서대학교 유일선
프로그래밍2 및 실습 C언어 기반의 C++ 2.
반도체 신입 Operator 채용 안내 ㈜ 하이닉스반도체에서는 2011년도 신입 Operator 사원을 모집합니다.
2009학년도 1학기 상지대학교 컴퓨터정보공학부 고 광 만
제주닷컴 매뉴얼 (실시간 예약시스템) 2013년 10월.
5장. 상수와 기본 자료형. 5장. 상수와 기본 자료형 5-1 C 언어가 제공하는 기본 자료형 자료형(data type) 기본 자료형 사용자 정의 자료형 int val; "선언할 변수의 특징을 나타내기 위한 키워드" 기본 자료형 기본적으로 제공이 되는 자료형 사용자.
Chapter 3 클래스. 최호성.
10장. 자바빈(JavaBean) 이 장에서 배울 내용 : 화면에 표시를 담당하는 JSP페이지와 실제프로그램을 처리하는 로직을 분리하는 것에 대해서 학습한다. 하나의 JSP페이지 안에 디자인부와 로직부가 혼재하게 되면 프로그램의 협업과 유지보수가 어렵다. 자바빈은 로직을.
이장에서 배울 내용 : 화면에 표시를 담당하는 JSP페이지와 실제프로그램을 처리하는 로직을 분리하는 것에 대해서 학습한다
[ 포털 사이트 연관검색어/자동완성 등록 서비스 ]
DataScience Lab. 박사과정 김희찬 (월)
나이스 진로정보 초‧중‧고 연계 서비스 안내 (수) 한국교육학술정보원 교육행정부 김지광 선임연구원
가상함수와 추상 클래스.
메소드와 클래스 정의 및 문제 풀이 Method and Class Define and Problem Solve
11장. 1차원 배열 IT응용시스템공학과 김 형 진 교수.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 09. C언어의 핵심! 함수!
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
게임프로그래밍 I - 1차원 배열 - 공주대학교 게임디자인학과 박 찬 교수 2011년 4월 25일.
컴퓨터공학실습(I) 3주 인공지능연구실.
Spring DI 이해 및 활용.
Homework #9 (1/2) 다음 지시에 따라 프로그램/결과(혹은 설명)를 출력하여 제출한다.
Homework #9 (1/2) 다음 지시에 따라 프로그램/결과(혹은 설명)를 출력하여 제출한다.
자바 5.0 프로그래밍.
3장. 클래스의 기본.
Chapter 02. 소프트웨어와 자료구조.
C89(C++03) 프로그래밍 (Part 2) 7 배열 8 변수 범위 9 포인터 10 유도 자료형.
nauten Compiler – Report Ver.3 Mini-C (주간)
[ 단원 06 ] 상속과 다형성.
6장 클래스(상속).
2015년 2학년 1반.
천국 가는 길 천국 가는 길 ♧ 천국 가는 길 ♧ 1. 죄와 사망(지옥) 1) 사람의 3가지 공통점 - 죄인, 죽음, 심판
실습과제 1번 생성된 파일 basic.txt를 프로젝트 폴더에서 메모장으로 열고 내용을 확인
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
argc, argv 의 사용방법 #include <stdio.h>
17장. 포인터의 포인터.
C.
Java의 정석 제 7 장 객체지향개념 II-3 Java 정석 남궁성 강의
배열, 포인터, 함수 Review & 과제 1, 2.
프로그래밍 기법 최적화 프로그래밍.
11장. 1차원 배열.
Presentation transcript:

상속

1.상속 하위 클래스가 상위 클래스의 모든 멤버를 물려받는 것을 상속이라고 합니다. 상위 클래스를 super class 또는 base class라고 하며 하위 클래스를 sub class 또는 derived class 라고 합니다. 상속 방법 @interface 클래스이름: 상속하는 클래스 Objective-C는 단일 상속만 지원합니다. CocoaTouch에서는 NSObject 클래스가 최상위 클래스이며 모든 클래스는 이 클래스로부터 상속을 받아야만 합니다. 하위 클래스는 상위 클래스의 멤버를 다시 정의하지 않아도 있는 것으로 간주하며 자신의 멤버를 정의하고자 한다면 정의하고자 하는 내용을 기재하면 되고 정의할 내용이 없다면 블록만 연 후 닫아도 됩니다. 상속 시 상위 클래스와 하위 클래스에 동일한 멤버 변수의 정의는 안됩니다. 상위 클래스의 메서드를 하위 클래스에서 다시 정의해서 사용하는 것은 가능한데 이를 메서드 오버라이딩(재정의)이라고 합니다.

예제 1.Command Line Tool 프로젝트 생성(InheritanceTest) 2.NSObject로 부터 상속받는 Cocoa Touch Class 생성(Test) 3.Test.h 파일 작성 #import <Foundation/Foundation.h> @interface Test : NSObject @property int val; @end 4.Test.m 파일 작성 #import "Test.h" @implementation Test @synthesize val;

5.main.m 파일 작성 #import <Foundation/Foundation.h> #import "Test.h" int main (int argc, const char * argv[]) { @autoreleasepool Test * obj = [[Test alloc] init]; NSLog(@"%@", [obj description]); } return 0;

2.self 클래스 내에서 현재 객체를 가리키는 숨겨진 포인터 Objective–C 는 멤버 메서드를 클래스 내부에서 호출하더라도 리시버가 반드시 있어야 합니다. self.프로퍼티 와 self->멤버변수 또는 멤버변수를 혼동하면 안됩니다. self.프로퍼티는 getter나 setter를 호출하는 것이므로 지정된 특성에 따라 동작 클래스 내에서 self는 자신의 클래스 객체와 자신의 주소를 저장하고 있습니다. 메서드로서의 self는 자신의 클래스 타입과 id를 문자열로 리턴합니다.

예제 1.앞의 예제 수정 2.Test.h 파일 수정 #import <Foundation/Foundation.h> @interface Test : NSObject @property int val; @property (nonatomic, retain) NSNumber * num; -(void)disp; @end

3.Test.m 파일 수정 4.main.m 파일 수정 #import "Test.h" @implementation Test @synthesize val; @synthesize num; -(void)disp { int val = 10; NSLog(@"Local val:%d", val); NSLog(@"Member val:%d", self->val); NSLog(@"num의 retain:%d",[num retainCount]); num = [[NSNumber alloc]initWithInteger:1000]; self.num = [[NSNumber alloc]initWithInteger:100]; } @end 4.main.m 파일 수정 #import <Foundation/Foundation.h> int main (int argc, const char * argv[]) @autoreleasepool id obj = [[Test alloc] init]; [obj disp]; NSLog(@"%@", [obj description]); return 0;

3.super super는 상위 클래스 객체를 가리키는 예약어입니다. 상위 클래스에 있는 메서드를 하위 클래스에서 재정의 하는 것을 method overriding(재정의) 이라고 합니다. Overriding 하는 경우 특정한 메서드들은 상위 클래스의 메서드를 호출해야만 하는 경우가 있습니다. 프레임워크(SDK)에서는 상위 클래스의 메서드를 재정의할 때 상위 클래스의 메서드를 호출하고 추가로 코드를 작성하는 경우가 많습니다.

예제 1.앞의 예제 수정 2.Test.m 파일에 추가 -(NSString *)description { NSLog(@"메서드 오버라이딩"); return [NSString stringWithFormat:@"num:%@",num]; }

4.다형성과 동적 바인딩 오버라이딩을 하는 이유는 Framework 클래스를 이용하는 경우에는 기능을 보강하기 위해서 이고 직접 만든 클래스인 경우에는 다형성을 구현하기 위한 것입니다. 다형성은 동일한 메시지에 대하여 서로 다르게 반응하는 성질입니다. 다형성이 구현되기 위해서는 프로그래밍 언어가 동적 바인딩을 지원해야 합니다. 동적바인딩이란 객체가 컴파일 시에 자신의 타입을 결정하지 않고 실행(메모리 할당)시에 자신의 타입을 결정하는 것입니다. 선언이 될 때 사용된 타입은 무시하고 메모리를 할당받을 때 어떤 타입으로 할당받았는냐에 따라 동작하는 것입니다. 객체 지향 언어에서 상위 클래스 타입으로 선언된 변수에는 하위 클래스 타입의 객체를 대입할 수 있습니다.

예제

1.앞의 예제 수정 2.Test.m 파일에 추가 3.main.m 파일의 main 메서드 수정 -(void)dealloc { [num release]; [super dealloc]; } 3.main.m 파일의 main 메서드 수정 #import <Foundation/Foundation.h> #import "Test.h" int main (int argc, const char * argv[]) @autoreleasepool id obj = [[Test alloc] init]; [obj disp]; NSLog(@"하위 클래스의 description"); NSLog(@"%@", [obj description]); [obj release]; obj = nil; obj = [[NSObject alloc]init]; NSLog(@"상위 클래스의 description"); return 0;

5.정적 타이핑과 동적 타이핑 참조형 변수를 선언할 때 클래스 타입을 명시하는 것을 정적 타이핑이라고 합니다. 참조형 변수를 선언할 때 클래스 타입을 명시하는 것을 정적 타이핑이라고 합니다. 동적 타이핑이란 참조형 변수를 선언할 때는 id 타입으로 선언한 후 메모리 할당을 받을 때 변수의 참조 타입을 결정하는 것을 의미합니다. Objective-C에서는 정적 타이핑과 동적 타이핑을 모두 지원합니다. 동적 타이핑을 사용하면 하나의 변수에 모든 클래스 타입의 객체를 대입할 수 있으므로 프로그램을 작성하는데 있어서 매우 편리합니다. 정적 타이핑은 프로그램의 가독성을 높여주고 에러를 효율적으로 찾을 수 있습니다. 정적 타이핑을 사용하는 경우 컴파일 시 선언할 때 사용한 클래스의 멤버가 아닌 멤버를 호출하려는 문장을 만나면 컴파일 시 오류나 경고를 발생 시키기 때문에 오류를 찾는 것이 실행 단계에서 런타임 오류를 찾는 것보다 수월합니다.

6.클래스 객체 Objective-C에서는 클래스도 하나의 객체를 생성합니다. 클래스를 정의하는데 필요한 정보를 객체를 생성해서 보관하게 됩니다. 정보로는 클래스 이름이나 상위 클래스의 이름 및 멤버 변수, 메서드의 이름과 리턴 타입 및 매개변수 및 내용 등이 있습니다. 클래스도 독자적인 변수와 메서드를 가지고 있으며 static이라는 예약어를 이용해서 생성합니다. 클래스 객체는 Class라는 데이터 타입으로 정의되어 있으며 NSObject 클래스에는 class 라는 메서드가 정의되어 있어서 클래스 객체를 리턴해줍니다. %@으로 description을 호출하면 일반 클래스의 객체인 경우는 클래스 이름과 id를 문자열로 리턴하고 NSCoding을 conform 클래스의 객체는 파일에 저장되는 내용을 문자열로 리턴합니다.

1)static 메서드 메서드를 선언할 때 –는 멤버 메서드의 선언을 의미하며 이 메서드는 객체가 사용하며 +는 클래스 메서드를 의미하며 클래스 객체가 사용합니다. 특정 객체에 속할 필요가 없는 메서드나 객체 생성없이 호출가능한 메서드를 (생성자 역할을 수행하는 메서드나 연결 및 연결 해제에 관련된 메서드)위해 사용합니다. 클래스 메서드에서는 멤버 변수의 사용은 안되며 static 변수나 지역 변수만 사용이 가능합니다. 2)static 변수 static이라는 키워드를 이용해서 클래스 객체를 통해 접근이 가능한 변수를 만들 수 있습니다. 서로 다른 파일에 구현되어 있는 경우에는 클래스 메서드로 static 변수에 접근하도록 정의하고 이를 호출하는 방법으로 사용해야 합니다.

예제

1.앞의 예제 수정 2.Test.h 파일 수정 3.Test.m 파일 수정 #import <Foundation/Foundation.h> @interface Test : NSObject @property int val; -(void)disp; +(void)print; @end 3.Test.m 파일 수정 #import "Test.h" @implementation Test @synthesize val; -(void)disp { NSLog(@"멤버 메서드"); NSLog(@"val:%d", val); } +(void)print NSLog(@"클래스 메서드"); //아래 문장은 경고 - 쓰레기 값이 출력됩니다. //NSLog(@"val:%d", val);

4.main.m 파일의 main 메서드 수정 #import <Foundation/Foundation.h> #import "Test.h" int main (int argc, const char * argv[]) { @autoreleasepool Test * obj = [[Test alloc] init]; obj.val = 100; //아래 문장은 경고 - 런타임 에러 //[Test disp]; [obj disp]; [Test print]; //[obj print]; } return 0;

예제

1.Command Line Tool 프로젝트 생성(SequenceTest) 2.NSObject로 부터 상속받는 Cocoa Touch Class 생성(Test) 3.Test.h 파일 작성 #import <Foundation/Foundation.h> @interface Test: NSObject { int number; } -(id)init; -(void)disp; @end 4.Test.m 파일 작성 #import "Test.h" static int sequence= 0; @implementation Test - (id)init self = [super init]; if(self) number = ++sequence; return self; - (void)disp NSLog(@"sequence: %d number: %d", sequence, number);

5.main.m 파일 작성 #import <Foundation/Foundation.h> #import "Test.h" int main (int argc, const char * argv[]) { @autoreleasepool Test *obj1, *obj2; obj1 = [[Test alloc]init]; [obj1 disp]; obj2 = [[Test alloc]init]; [obj2 disp]; } return 0;

7.nil 포인터 다른 언어의 null과 유사하며 0의 값을 갖는 포인터 이 포인터는 어떠한 메시지 처리도 할 수 없습니다.

예제

1.앞의 예제에서 main.m 파일 수정 #import <Foundation/Foundation.h> #import "Test.h" int main (int argc, const char * argv[]) { @autoreleasepool Test *obj1, *obj2; obj1 = [[Test alloc]init]; [obj1 disp]; NSLog(@"%@", obj1); [obj1 dealloc]; //obj1 = nil; obj2 = [[Test alloc]init]; [obj2 disp]; NSLog(@"%@", obj2); } return 0;

8.지역 메서드 선언부에는 없고 구현부에만 존재하는 메서드 선언부에는 없지만 메서드를 외부에서 호출할 수 있습니다. 이 경우에는 메서드의 구현 부분이 호출하는 부분보다 먼저 나와야 합니다. 호출하는 부분이 먼저 오게되면 에러는 아니지만 경고를 출력하게 될 것입니다. Cocoa Touch 프로그래밍에서는 이 메서드는 인터페이스 빌더에서는 보이지 않습니다.

예제 #import <Foundation/Foundation.h> @interface Temp: NSObject{ int val; } -(void)Disp; -(id)init:(int) a; @end @implementation Temp -(id)init:(int) a { val = a; return self; -(int)value { return val; -(void)Disp{ NSLog(@"%i\n", [self value]); int main(void){ id obj; obj=[[Temp alloc] init:10]; [obj Disp]; NSLog(@"%d\n",[obj value]); return 0;