[ this ]
- 클래스의 필드값과 메소드의 변수값이 동일할 때 둘을 구분하기 위한 장치
- 메소드의 매개변수 (parameter)값이 필드 값을 변경할 때 같은 이름을 사용하기 위해 사용됨
[ 생성자 ]
- 처음 인스턴스를 생성할 때 인자(argument)를 넣어주면 필드 값으로 입력 됨
- 입력된 필드 값은 해당 인스턴스 내에서 고정적으로 계속 사용되는 값
- Student st = new Student("인자값");
이유 없이 메소드의 변수와 클래스의 필드 이름이 같은 것은 권장하지 않지만, 일단 아래와 같은 방식으로 사용하는 것도 가능합니다.
많은 경우 this는 생성자를 선언할 때 사용됩니다. 생성자란, 하나의 클래스에서 특정한 값이 고정적으로 계속 사용돼야 하는 값이 있다면 계속 중복 입력해주는 것을 막기 위해 인스턴스를 생성할 때 한 번만 넣어주는 것을 의미합니다.
생성자를 선언해주는 생성자 선언 Test(int a)의 "int a" 와 필드의 "int a"는 같은 용도이므로 이름을 같게 만드는 것이 좋습니다. 이 때 두 개의 a를 구분지어 주는 구분자가 바로 this입니다. 만약 this 없이 a = a; 로 작성하게 되면 필드에는 아무런 값이 들어가지 않아 0이 두 번 출력됩니다.
- 생성자 선언은 접근 제한자 사용 가능 (public, default)
- 리턴 타입 지정은 없음 (int, void, String 등)
- 메소드는 소문자로 시작하지만, 생성자 선언에서는 클래스 이름과 동일하게(대문자 시작) 함
한가지 팁은 생성자 선언은 굳이 직접 코드로 짤 필요가 없고 이클립스의 기능을 이용하면 자동으로 만들어 줍니다. 우클릭 - Source - Generate Constructor using Fields"를 클릭한 후, 생성자로 사용하고 싶은 필드를 선택해서 "Generate" 해주시면 자동 생성됩니다.
생성자의 경우 메소드와 마찬가지로 오버로딩이 가능합니다. 즉, 인스턴스 생성 시 제공되는 생성자의 타입에 따라 다르게 값이 들어가도록 설정 가능합니다. 이 때 코드의 효율적 사용을 위해 this를 사용해 다른 메소드를 호출할 수 있습니다.
생성자 선언이 아닌 메소드에서도 this를 사용하는 경우가 있습니다. 메소드의 매개변수 값이 필드 값을 변경할 경우 입니다. 꼭 같은 이름을 써야 한다는 법은 없지만, 필드 값을 변경하기 위한 매개변수라면 알아보기 쉽게 같은 이름을 써주는 것도 좋습니다. 특정 메소드를 통해 필드 값을 바꾸면 그 필드 값을 사용하는 다른 함수들의 결과 또한 바뀌게 됩니다.
'▸JAVA > 기본 문법' 카테고리의 다른 글
애노테이션(annotation) (0) | 2019.12.10 |
---|---|
추상 (abstract) 클래스와 메소드 (0) | 2019.12.10 |
클래스 상속 (extends) (0) | 2019.12.10 |
Static, Final의 의미와 사용법 (0) | 2019.12.10 |
접근 제한자 (Public, Protected, Default, Private) (0) | 2019.12.10 |
댓글