Objective C <9>. 상속(1)

오늘의 주제

  • 상속의 개념 

아홉번째 시간입니다.^^
Objective-C는 정말 오랜만이네요..^^초코찌찌님의 요청으로 새로운 개념을 하나 가지고 왔습니다~

지난 번에는 메서드에 대해 알아보았습니다~이번에는 클래스의 상속에 대해 알아보도록 합니다.^^

이 포스팅은 지난 
2012/01/30 - [Objective-C] - Objective C <5>. 클래스와 객체(인스턴스)<1>
2012/02/05 - [Objective-C] - Objective C <6>. 클래스와 객체(인스턴스)<2>

이 두개의 포스팅 지식을 필요로 합니다~
다 알고 계신가요?ㅎ
그렇다면 고고고고고고고고!! 무비무비무비!!!

상속이란?

상속이란 무엇일까요?
저는 쉽게 한마디로 말하면, 클래스의 확장 이라고 표현하고 싶네요.

즉, 이미 만들어져 있는 클래스에서 내가 원하는 부분을 추가하거나 변경하여 새로운 클래스를 생성할 수 있습니다.
 하지만 여기에도 규칙이 있기 마련이죠..^^

상속에서는 부모클래스와 자식 클래스라는 개념을 가지고 말을 합니다.
자식 클래스는 부모 클래스를 상속 받는다고 표현합니다.
상속 받는다는 것은 원래 클래스에 추가나 변경을 한다고 말씀드렸죠?
그렇다면 부모클래스와 자식 클래스 중에 더 확장된 클래스는 무엇일까요?
네, 바로 자식 클래스이죠~
부모클래스 보다 자식 클래스가 더 덩치가 크다 이말입니다^^ (사실 그렇지 않을 수도 있습니다만, 개념상 편하게 이렇다고 합시다 ㅎ)

그림에서 보다시피 부모가 자식에게 자신의 대부분의 것을 물려줍니다.자식은 물려받은 그것들에서 마음에 들지 않는 것이 있으면 바꾸기도 하고, 더 필요한 것이 있으면 추가하기도 합니다.
자 대충 감이 오시나요?상속을 받게되면 부모 클래스의 헤더에 선언된 메서드와 변수가 자식에게 상속됩니다.
물론 모두 상속되는 건 아닙니다. 부모클래스에서 상속해주지 않겠다고 선언해 준 녀석이 있다면 그 녀석들은 상속되지 않습니다.

그럼 실질적으로 상속이 어떻게 되는지 한 번 볼까요?
아래 그림을 보면, 우리가 만들었던 클래스 입니다.
이 클래스를 만들때 대화상자에서 Sub class of... NSObject라고 했던 것 기억하시려나 모르겠습니다^^
지금 MyFirstClass.h 헤더파일을 보게되면 MyFirstClass는 NSObject를 상속받았음이 명시되어 있습니다.
그렇습니다. 모든 Objective-C의 class들은 기본적 NSObject를 상속받고 있습니다.
아래 그림처럼 직접적으로 받던지, 아니면 우리가 다음에 새로 만들어볼 MyFirstClass의 자식클래스처럼 다른 클래스를 거쳐 상속을 받던지간에 어찌되었든 상속을 받습니다.

자, 그럼 이 NSObject라는 녀석을 한 번 살표볼까요?
NSObject 에서 오른쪽 버튼 클릭을 하여 Jump to Definition로 향합니다^^

그러면 Foundation framework에 포함된 NSObject.h 파일에서 NSObject의 선언부를 볼 수 있습니다.
NSObject에 이런저런 많은 메서드들이 선언되어있네요^^우리가 어떤 인스턴스를 만들어 줄 때, alloc, init 해줬던 것을 기억하시나요?ㅎ
고녀석들 요기있네요ㅎㅎㅎ
말씀드렸듯이 모든 클래스들은 NSObject를 상속받기 때문에 어디서든지 alloc, init을 할 수 있는 것입니다.

상속 실습해보기

자, 대충 개념은 잡았겠다, 실습 한 번 들어가 봅시다 ㅎ

새로운 클래스를 만들기 위하여 New File... 합니다!

Cocoa의 Objective-C class를 선택해 주시고 Next~

자, 그 후에 여기서!! Subclass of MyFirstClass를 해 주는 겁니다!!
MyFirstClass를 상속 받겠다는 의미가 되겠습니다!!

그 후에 클래스명을 FirstChildClass로 합니다.

FirstChildClass.h로 이동해 봅니다.

MyFirstClass를 상속하고 있다고 명기되어 있습니다. 정말 딱 이거 하나 있는데 이 클래스에서 어떤일이 벌어졌을까요?ㅎㅎㅎ

심지어 구현부도 텅텅 비어있는 멍텅구리 같아 보입니다 ㅎㅎㅎ

자, 하지만 우리는 상속받고 있다는 것을 알기 때문에, 무작정 뭔가를 시도해 봅시다~
열시미 타이핑타이핑 ~_~ 자세한 소스 설명은 주석에 담겨있지요?ㅎ

짜잔! 실행 결과입니다.

분명히 자식클래스는 속이 텅텅 비어있는 녀석 같아보였는데, 부모클래스에서 이미 만들어져 있는 메서드와 변수를 사용할 수 있었습니다.
캬~ 우리 모두 정말 부모님께 감사해야 합니다...ㅋㅋ

여하간 이것으로 상속에 대한 개념을 좀 알아봤습니다. 횡설수설이라 이해가 잘 되실지는 모르겠네요ㅠㅠ

혹여나 이해가 되지 않는 부분 또는 잘못된 점이 있다면 댓글 부탁드립니다~^^

그럼 뿅!!!!!!!!!!!!!

by yagom


p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.
RSS Feed 받기   

This Post Has 2 Comments

  1. 그림이미지가 보이질 않네요 ㅠㅠ

    위 형식으로 파일을 불러오지 못하나봐요 ㅠㅠ

    1. DB 마이그레이션 중에 깨졌나봅니다 +_+ 또 문제되는 곳이 있으면 말씀 부탁드립니다 🙂

댓글 남기기

Close