다루두루

블로그 이미지

차케요

공부하면서 정리하는 노트같은 블로그입니다.

[JAVA] 자바 this

[JAVA]자바 공부하기 2013. 12. 30. 15:04

 

지난 생성자 포스팅에서 this()라는 메서드를 조금 살펴봤었는데요. 이번에는 예약어 this에 대해서 알아보도록 하겠습니다. 먼저 간단한 예제를 하나 살펴보도록 하겠습니다.

 

 


위와 같은 간단한 프로그램이 있다고 했을때 실행을 시켜보면 aaa.disp()와

 

 bbb.disp()는 각각x=10, y=20 과 x=5, y=6을 출력하게 되는데요. 이 결과가

 

어찌보면 당연하지만 조금 더 깊게생각해보면 당연하지가 않은 결과 입니다.

 

먼저 메인메서드에서 aaa와 bbb객체를 만들면서 메모리상에는 두개의 x와 y값이

 

할당 되어 있게 됩니다. aaa와 bbb에는 모두 x와 y의 값이 있는 상태에서 aaa.disp()

 

 실행의 뜻은 aaa 객체를 통에서 disp()메서드를 호출하라는 뜻인데요.

 

 그러면 Ex04클래스 에서 disp()메서드를 먼저 찾게 될것입니다.

 

 

객체를 생성할때 만들어진 x,y는 분명이 메모리상에 두 개씩이 있는데,

 

JVM이 어떻게 알고 aaa에 대입된 10과 20을 출력하게 되는 것일까요?

 

 

 

 여기서 먼저 개념을 잡고 넘어가야 할게 있습니다.

 

aaa.disp(10,20);

 

1. 해당 객체를발생시킨 클래스(Ex04) 내부에서 메서드(disp())를 찾는다.

 

2. 그 메서드가(disp()) static메서드가 아니라면 0번째 매개변수에게 객체를 대입한다.

 

 

클래스 내부에 있는 메서드는 static을 제외하고는 모두 0번째 매개변수를 갖고 있습니다.

 

0번째 매개변수라는 것은 모든 매개변수보다 우선한다는 뜻입니다. 그리고 클래스 내부에

 

 있는 필드는 static필드를 제외하고 모두 this객체의 접근이 생략되어 있습니다.

 

조금 복잡하지만 예제를 들어가면서 살펴보기로 하겠습니다.

 

 

 

 

위의 경우 aaa()와 bbb()는 0번째 매개변수를 갖게 됩니다. 하지만 CCC()는 static메서드

 

이기 때문에 0번째 매개변수를 갖지 않습니다. 이걸 0번째 매개변수와 this객체를 통한

 

접근을 표시해 표시해보면 에러가 발생하게 됩니다.

 

 

 

 

0번째 매개변수는 이미 가지고 있기 때문에 사용자가 임으로 사용할 수 없습니다.

 

그러나 this 객체부분은 적어도 됩니다.  위쪽의 예제에 적용 시켜보면 다음과 같습니다.

 

 

 

 

위의 예제를 살펴보면 첫번째로 aaa의 객체를 발생시킨 클래스가 Ex04이므로

 

그 클래스 내부에서 disp()메서드를 찾게됩니다. 그리고 disp()가 static이 아니기

 

 때문에 0번째의 매개변수인 this에게 객체인 aaa를 대입하게 됩니다.

 

이러한 용도로 사용되는 this는 생량할 수 있습니다. 하지만 꼭 써줘야 하는 경우도

 

 있습니다. 다음 예제를 살펴보도록 하겠습니다.

 

 

 

 

 

여기서 [x=x] 부분이 문제가 됩니다. 실제로 매개변수로 사용되는 변수명과 필드명이

 

 동일한 경우 반드시 두개를 구분해 줘야 합니다. 그것을 구분해 주는 것이 바로 자기

 

자신의 멤버 필드임을 표시하는 this객체 입니다. 따라서 다음과 같이 바꿔줘야 합니다.

 

 

 

 

 

저작자표시 비영리 변경금지 (새창열림)
Posted by 차케요

    최근...

  • 포스트
  • 댓글
  • 트랙백
  • 더 보기

카테고리

NEW (900)
아이폰 개발 기초 (7)
취미 (16)
아두이노 (16)
[안드로이드] 어플만들기 (77)
안드로이드 기초 다지기 (61)
슈팅게임 만들기 (4)
[JAVA]자바 공부하기 (48)
C언어 알고리즘 (61)
[Unity3D]유니티3D 강좌 (7)
컴퓨터 (325)
포토샵CS2 강좌 (6)
유용한 프로그램 (244)
리눅스 노트정리 (22)
임베디드 리눅스 (11)
New블로그 (9)
음식의 효능 (4)
일반상식 (56)
HTML 공부 (40)
포토샵 공부 (36)
엑셀 (6)
파워포인트 공부 (19)
노트정리 (38)
일상 (33)
TV영화 (85)
방명록 : 관리자 : 글쓰기
차케요's Blog is powered by daumkakao
Skin info material T Mark3 by 뭐하라
favicon

다루두루

공부하면서 정리하는 노트같은 블로그입니다.

  • 태그
  • 링크 추가
  • 방명록

관리자 메뉴

  • 관리자 모드
  • 글쓰기
  • NEW (900)
    • 아이폰 개발 기초 (7)
    • 취미 (16)
      • 아두이노 (16)
    • [안드로이드] 어플만들기 (77)
      • 안드로이드 기초 다지기 (61)
      • 슈팅게임 만들기 (4)
    • [JAVA]자바 공부하기 (48)
    • C언어 알고리즘 (61)
    • [Unity3D]유니티3D 강좌 (7)
    • 컴퓨터 (325)
      • 포토샵CS2 강좌 (6)
      • 유용한 프로그램 (244)
    • 리눅스 노트정리 (22)
      • 임베디드 리눅스 (11)
    • New블로그 (9)
    • 음식의 효능 (4)
    • 일반상식 (56)
    • HTML 공부 (40)
    • 포토샵 공부 (36)
    • 엑셀 (6)
    • 파워포인트 공부 (19)
    • 노트정리 (38)
    • 일상 (33)
    • TV영화 (85)

카테고리

PC화면 보기 티스토리 Daum

티스토리툴바