2009/03/20 10:15
CodeIN/Java
흠..
요새 다시 자바 책을 보면서 이전에는 생각하지 않았던 것들이 마구 생각이 난다.
그래서 생각나는것... 알고 싶은것... 몰랐던 것들을 다 정리를 하기로 했다.
super()를 사용하는 이유에 대해서 평소에 궁금했는데, 그닥 설명이 제대로 되어 있는 곳이 없다... 아니.. 아마 귀찮아서 검색을 하지 않았을 것이다^^;;
일단 super부터
뭐 볼 때마다 느끼는 거지만.. 플래쉬로 배우는 자바는 꼭 추천해주고 싶다.
볼 때마다 새롭고 볼 때마다 감동이다^^)b
그리고 정말 설명이 쉽게 되어 있다^^ 초보뿐만 아니라 중급자에게도 괜찮을듯^^
아.... 갑자기 책 광고를^^;;; 흠흠...
아래는 남궁성 님이 운영하시는 네이버 카페. 가면 강좌를 공짜로 ㅎㅎㅎ
http://cafe.naver.com/javachobostudy
이번에는 super()
흠... 또 감동이다^^
이 책을 보면은 예전에 같은 대학교 연구실에 있던 인석이 형이 생각난다.^^
인석이형은 일반 자바 책에서는 배울 수 없었던 것들을 알려주셨던 나의 스승님이시다^^
한번 찾아뵙고 인사를 들여야 할텐데...
죄송합니다 인석이형님^^ 하하~ 이렇게나마 인사를
super/super() 에 대해서 인터넷을 뒤지면서 공부 좀 하고 나름 정리를 하려고 시작한건데...내가 알고 싶었던 것들... 궁금햇던 것들....
이 모든 것이 남궁성님의 책 하나로 모든 설명이 다 되어 버렸다^^
요새 다시 자바 책을 보면서 이전에는 생각하지 않았던 것들이 마구 생각이 난다.
그래서 생각나는것... 알고 싶은것... 몰랐던 것들을 다 정리를 하기로 했다.
super()를 사용하는 이유에 대해서 평소에 궁금했는데, 그닥 설명이 제대로 되어 있는 곳이 없다... 아니.. 아마 귀찮아서 검색을 하지 않았을 것이다^^;;
일단 super부터
플래시로 배우는 Java(http://www.javachobo.com)에서 발췌한겁니다.
super는 자손클래스에서 조상클래스로부터 상속받은 멤버를 참조하는데 사용되는 참조변수이다. 멤버변수와 지역변수의 이름이 같을 때 this를 사용해서 구별했듯이 상속받은 멤버와 자신의 클래스에 정의된 멤버의 이름이 같을 때는 super를 사용해서 구별할 수 있다.
조상클래스로부터 상속받은 멤버도 자손클래스 자신의 멤버이므로 super대신 this를 사용할 수 있다. 그래도 조상클래스의 멤버와 자손클래스의 멤버가 중복 정의되어 서로 구별해야하는 경우에만 super를 사용하는 것이 좋다.
조상의 멤버와 자신의 멤버를 구별하는데 사용된다는 점을 제외하고는 super와 this는 근본적으로 같다. 모든 인스턴스메서드에는 자신이 속한 인스턴스의 주소가 지역변수로 저장되는데, 이것이 참조변수인 this와 super의 값이 된다.
static메서드(클래스메서드)는 인스턴스와 관련이 없다. 그래서 this와 마찬가지로 super역시 static메서드에서는 사용할 수 없고 인스턴스메서드에서만 사용할 수 있다.
super는 자손클래스에서 조상클래스로부터 상속받은 멤버를 참조하는데 사용되는 참조변수이다. 멤버변수와 지역변수의 이름이 같을 때 this를 사용해서 구별했듯이 상속받은 멤버와 자신의 클래스에 정의된 멤버의 이름이 같을 때는 super를 사용해서 구별할 수 있다.
조상클래스로부터 상속받은 멤버도 자손클래스 자신의 멤버이므로 super대신 this를 사용할 수 있다. 그래도 조상클래스의 멤버와 자손클래스의 멤버가 중복 정의되어 서로 구별해야하는 경우에만 super를 사용하는 것이 좋다.
조상의 멤버와 자신의 멤버를 구별하는데 사용된다는 점을 제외하고는 super와 this는 근본적으로 같다. 모든 인스턴스메서드에는 자신이 속한 인스턴스의 주소가 지역변수로 저장되는데, 이것이 참조변수인 this와 super의 값이 된다.
static메서드(클래스메서드)는 인스턴스와 관련이 없다. 그래서 this와 마찬가지로 super역시 static메서드에서는 사용할 수 없고 인스턴스메서드에서만 사용할 수 있다.
뭐 볼 때마다 느끼는 거지만.. 플래쉬로 배우는 자바는 꼭 추천해주고 싶다.
볼 때마다 새롭고 볼 때마다 감동이다^^)b
그리고 정말 설명이 쉽게 되어 있다^^ 초보뿐만 아니라 중급자에게도 괜찮을듯^^
아.... 갑자기 책 광고를^^;;; 흠흠...
아래는 남궁성 님이 운영하시는 네이버 카페. 가면 강좌를 공짜로 ㅎㅎㅎ
http://cafe.naver.com/javachobostudy
이번에는 super()
플래시로 배우는 Java(http://www.javachobo.com)에서 발췌한겁니다.
this()와 마찬가지로 super() 역시 생성자이다. this()는 같은 클래스의 다른 생성자를 호출하는 데 사용되지만, super()는 조상클래스의 생성자를 호출하는데 사용된다.
자손클래스의 인스턴스를 생성하면, 자손의 멤버와 조상의 멤버가 모두 합쳐진 하나의 인스턴스가 생성된다. 그래서 자손클래스의 인스턴스가 조상클래스의 멤버들을 사용할 수 있는 것이다.
이 때 조상클래스 멤버의 생성과 초기화 작업이 수행되어야 하기 때문에 자손클래스의 생성자에서 조상클래스의 생성자가 호출되어야 한다.
생성자의 첫 줄에서 조상클래스의 생성자를 호출해야하는 이유는 자손클래스의 멤버가 조상클래스의 멤버를 사용할 수도 있으므로 조상의 멤버들이 먼저 초기화되어 있어야 하기 때문이다.
이와 같은 조상클래스 생성자의 호출은 클래스의 상속관계를 거슬러 올라가면서 계속 반복된다. 마지막으로 모든 클래스의 최고조상인 Object클래스의 생성자인 Object()까지 가서야 끝이 난다.
그래서 Object클래스를 제외한 모든 클래스의 생성자는 첫 줄에 반드시 자신의 다른 생성자 또는 조상의 생성자를 호출해야한다. 그렇지 않으면 컴파일러는 생성자의 첫 줄에 super();를 자동적으로 추가할 것이다.
this()와 마찬가지로 super() 역시 생성자이다. this()는 같은 클래스의 다른 생성자를 호출하는 데 사용되지만, super()는 조상클래스의 생성자를 호출하는데 사용된다.
자손클래스의 인스턴스를 생성하면, 자손의 멤버와 조상의 멤버가 모두 합쳐진 하나의 인스턴스가 생성된다. 그래서 자손클래스의 인스턴스가 조상클래스의 멤버들을 사용할 수 있는 것이다.
이 때 조상클래스 멤버의 생성과 초기화 작업이 수행되어야 하기 때문에 자손클래스의 생성자에서 조상클래스의 생성자가 호출되어야 한다.
생성자의 첫 줄에서 조상클래스의 생성자를 호출해야하는 이유는 자손클래스의 멤버가 조상클래스의 멤버를 사용할 수도 있으므로 조상의 멤버들이 먼저 초기화되어 있어야 하기 때문이다.
이와 같은 조상클래스 생성자의 호출은 클래스의 상속관계를 거슬러 올라가면서 계속 반복된다. 마지막으로 모든 클래스의 최고조상인 Object클래스의 생성자인 Object()까지 가서야 끝이 난다.
그래서 Object클래스를 제외한 모든 클래스의 생성자는 첫 줄에 반드시 자신의 다른 생성자 또는 조상의 생성자를 호출해야한다. 그렇지 않으면 컴파일러는 생성자의 첫 줄에 super();를 자동적으로 추가할 것이다.
흠... 또 감동이다^^
이 책을 보면은 예전에 같은 대학교 연구실에 있던 인석이 형이 생각난다.^^
인석이형은 일반 자바 책에서는 배울 수 없었던 것들을 알려주셨던 나의 스승님이시다^^
한번 찾아뵙고 인사를 들여야 할텐데...
죄송합니다 인석이형님^^ 하하~ 이렇게나마 인사를
super/super() 에 대해서 인터넷을 뒤지면서 공부 좀 하고 나름 정리를 하려고 시작한건데...내가 알고 싶었던 것들... 궁금햇던 것들....
이 모든 것이 남궁성님의 책 하나로 모든 설명이 다 되어 버렸다^^
'CodeIN > Java' 카테고리의 다른 글
| [ant] ant (0) | 2009/03/20 |
|---|---|
| [java] toString() (0) | 2009/03/20 |
| [java] super / super() 를 사용하는 이유. (0) | 2009/03/20 |
| [ruby] 한번 공부해보고 싶은 Ruby (0) | 2009/03/19 |
| [java]random 생성 (0) | 2009/03/08 |
| [java]ini 파일 읽기 (0) | 2009/02/11 |


