오늘의 주제

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

twitter : @yagomsoft

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

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓ 


Posted by yagom

댓글을 달아 주세요

  1. Favicon of https://winplz.tistory.com BlogIcon 윈플. 2012.03.28 15:17 신고  댓글주소  수정/삭제  댓글쓰기

    쉽게 잘 설명하셨군요.
    아마 (2)에서는 overriding에 대해서 다루 실 것 같군요?

    나중에 기회가 되신다면
    @property 를 하게 될 때 사용되는 retain, strong, weak 등에 대해서 정리한번 해주시면 좋을 것 같습니다
    생각보다 이유도 모르고 사용하는 사람이 많더라고요

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.03.28 17:24 신고  댓글주소  수정/삭제

      와우~ 역시 고수님은 눈치가 빠르십니다..ㅎㅎ
      들켜버렸네요+_+ㅋ
      흠...
      @property에 관한 설명은 아직 후일로 생각중이었는데, 고려해 보겠습니다.^^*
      사실 이번에 iOS 5.0에서 키워드들과 역할들이 변화되면서 조금 조심스럽습니다~ㅎ

  2. hyung 2012.11.19 13:18  댓글주소  수정/삭제  댓글쓰기

    와.. 야곰님 책하나 내심이 어떠신가요..
    솔직히 오늘 아침에 야곰님이 기초부터 다시 해보라고 하셔서
    어느세월에 그걸 하나.. 프로젝트 빨리 못하면 주임한테 혼나는데
    이러고 있다가
    그래도 속는셈치고 아침부터 계속 개념만 보다가

    딱 이 글 봤는데

    상속? 뭐지 그게.. 이러다가 뭔가 이거다!! 라는 삘이 와서 해보니
    제가 저번주부터 야곰님을 달달 볶던 그 문제가 해결 됬어요 ㅠㅠㅠ 너무 잘되요 ㅠㅠㅠㅠㅠㅠㅠ 아 행복해 ㅠㅠㅠ
    이래서 뭐든 기본이 없으면 안되는 거구나 싶더라구요
    히히힛 아무튼 너무너무 감사 드립니다.
    지금 완전행복함
    비행기타고 한국 돌아가서 식사라도 사드리고 싶은 심정임 ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.19 15:39 신고  댓글주소  수정/삭제

      ^^~ 저는 거짓말 하지 않습니다...ㅎㅎ
      기초를 쌓는 것이 가장 빠른 지름길입니다!
      앞으로 iOS 뿐만 아니라 어떤 프로젝트를 하더라도 꼭 잊지 않으셨으면 좋겠네요 ㅎ 아무리 바쁘고 촉박해도 정도를 걷는 것보다 빠른 지름길은 없다는 것을 ^^

      p.s 밥은 지금보다 훨씬 저에게 고마움을 느끼게 되는 순간이 오면 그 때 사주러 와주세요...ㅎㅎㅎ 1년이고 10년이고 20년이고 진심으로 기다리겠습니다 :)

  3. hyung 2012.11.19 16:35  댓글주소  수정/삭제  댓글쓰기

    정말 감사합니다 블로그 돌아보니 저만 이렇게 감사를 느끼는게 아닌거 같네요
    전 아직 어려서 잘 모르겠지만, 일도 하시면서 이렇게 틈틈이 관리 하시기도 정말 너무 힘드실거 같아요
    저같은 배우는 입장의 사람은 감사할 따름 입니다

    그나저나 산넘어 산이라고 저녀석 해결 했더니 또 다른녀석이 말썽이네요 ㅋㅋ..
    정말.. 하나하나 기능이 붙으면 재밌지만 그걸 붙이기가 정말 힘드네요^^..;;
    아무튼 힘내서 꼭 완성시키겠습니닷!~

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.19 17:05 신고  댓글주소  수정/삭제

      네,^^* 힘내시고 꼭 원하는 바를 이루시길 바랍니다!
      또 궁금한 것 있으면 언제든 말씀하세요 :)
      p.s. 제가 아마(아니... 확실히?) 동생일 것 같다는 생각이...ㅋㅋㅋ

  4. 첼로와짜짜 2012.11.26 18:48  댓글주소  수정/삭제  댓글쓰기

    잘봤습니다. 근데 상속부터 예제 클릭이 안되네요. 작아서 글씨가 잘 안보이네요 T^T

  5. formathead 2014.03.18 11:11  댓글주소  수정/삭제  댓글쓰기

    열심히 공부하고 있습니다. 너무 초보라 어디서 부터 시작해야 할지 막막했던차에 도움이 많이 되고 있습니다.

  6. 2017.08.24 16:56  댓글주소  수정/삭제  댓글쓰기

    죄송한데........
    이미지 크게 보기가 안되서.... 캡쳐부분을 하나도 모르겠어여...ㅠㅠㅠㅠㅠㅠㅠ