티스토리 뷰

자바 프로그래밍

자바 this 용법

plas 2019. 1. 18. 19:03

자바에서는 메소드 내에서 자신의 필드나 메소드를 접근할 때 별도의 객체. 을 붙이지 않고 바로 이름을 쓴다[각주:1]. 이클립스 같은 개발환경에서는 this. 이라고 하면 이 객체가 가진 필드와 메소드를 툴팁으로 보여주고 자동완성해 주기도 한다. 그러나 this 를 붙이지 않고 쓰면 어떤 이름에 해당하는지를 다음과 같은 규칙으로 결정한다.

  • 그 이름이 사용된 위치에서 속한 메소드의 지역변수나 매개변수에 해당 이름이 있으면 그것으로 본다.
  • 없으면 this의 필드에서 찾는다. 이 때 static 필드와 일반 필드에서 모두 찾는다.
  • 그래도 없으면 undefined identifier라는 컴파일 오류가 발생한다.

여기서 첫번째 this의 용법이 나온다. 즉 지역변수의 이름이 필드의 이름(예를 들어 name이라고 하자)과 같은 경우 그냥 이름을 쓰면 컴파일러는 지역변수로 이해한다. 그러므로 지역변수 때문에 가려진 필드의 이름이라는 것을 알려주는 방법으로 this.name 이런 식으로 써준다. 

이것은 일반 메소드에서도 나타나지만 생성자에서 많이 나타난다. 생성자가 필드의 초기값을 매개변수로 받아서 필드에 지정하는데, 이 때 매개변수의 이름은 아마도 그 의미를 가장 잘 나타내는 이름을 사용한다면 필드의 이름과 같을 가능성이 높다. 굳이 이름을 다르게 바꾸어도 되지만 this.을 이용해서 지정하는 것도 나쁘지 않다.

그럼 왜 굳이 필드와 같은 이름의 지역변수나 매개변수 이름을 택하는 걸까? 이름은 많은데... 그런데 코딩을 많이 해본 사람일수록 이름 붙이는 것이 얼마나 어려운지 잘 알 것이다. 그리고 정확히 의미와 역할을 잘 나타내는 이름이 있다면 다른 것을 쓰면 오히려 헷갈릴 수 있다. 그러면 그냥 같은 이름을 지역변수나 매개변수로 쓰는 것도 나쁘지 않다.

두번째 this 용법으로 생성자에서 다른 생성자의 호출이 있다. 앞의 생성자와 초기화 포스트에서 여러 개의 생성자가 있을 때 코드의 중복을 막기 위해서 생성자 코드가 들어있는 하나의 생성자를 만들고 다른 생성자들은 그것을 호출하게 하는 방법을 살펴보았다. 그 때 this 생성자를 통해 다른 생성자를 호출하게 된다.

세 번째 this의 용법으로 다른 객체에게 자신의 참조를 넘길 때 this를 쓴다. 예를 들어 해시맵의 학생과 팀의 예에서 팀이 학생을 찾아 멤버 리스트에 등록하는데, 이 때 학생에게 자신이 그 학생의 소속 팀임을 알려주는 방법으로 st.setTeam(this); 와 같은 문장을 쓴다. 여기서 this는 자기자신을 가리키고 st 학생 객체에게 너의 팀으로 나를 등록해라 라는 의미가 된다.

이외에도 자기자신(this)을 다른 객체의 메소드를 호출할 때 매개변수로 주는 경우가 자바에서는 많이 발생한다. 

자바와 같은 객체지향 언어에서 this가 의미하는 바를 잘 음미하는 것이 중요하다. 자바의 일반(비정적, non-static) 메소드는 반드시 객체가 있어야 불려진다. 즉 학생은 객체가 있어야 그 학생의 computeAverage() 같은 메소드를 호출할 수 있고 그 학생에 대해 registerLecture() 이런 메소드도 호출할 수 있다. 객체가 있다는 것은 이름, 학번, 학년, 학과 등이 정해져있다는 뜻이다. 자바에서 실체(인스턴스)는 메모리에 값을 저장한 공간이 있음을 의미한다. 즉 데이타가 있으면 실체가 있는 것이다. 이름 학번, 학년을 가진 학생 객체가 있으면 우리는 그 학생의 점수를 읽고 계산하고 출력할 수 있다. 그러므로 읽고 계산하고 출력하는 메소드들은 객체가 있어야 불려질 수 있다. 이 때 메소드 안에 들어있는 코드들은 그 객체가 주어가 되어서 스스로 읽고 계산하고 출력한다. 즉 자신의 데이터에 대해 메소드를 수행한다. 이때 자신을 나타내는 것이 this라는 키워드다. 


  1. 파이썬은 self. 을 붙이게 되어있다. 자바 프로그래머가 파이썬 코딩을 배울 때 가장 헷갈리는 것 중 하나다. [본문으로]
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함