일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스택 큐 차이
- ar vr 차이
- 스택 자바 코드
- 안드로이드 라이선스
- 플러터 설치 2022
- 안드로이드 유닛테스트란
- rxjava cold observable
- 안드로이드 라이선스 종류
- 큐 자바 코드
- rxjava hot observable
- rxjava disposable
- android retrofit login
- 서비스 쓰레드 차이
- 안드로이드 os 구조
- 2022 플러터 안드로이드 스튜디오
- Rxjava Observable
- 안드로이드 레트로핏 사용법
- 안드로이드 레트로핏 crud
- 자바 다형성
- 안드로이드 유닛 테스트 예시
- ANR이란
- 안드로이드 유닛 테스트
- 클래스
- jvm이란
- jvm 작동 원리
- 서비스 vs 쓰레드
- 멤버변수
- 객체
- android ar 개발
- 2022 플러터 설치
- Today
- Total
나만을 위한 블로그
[JAVA] 생성자란? this란? 본문
둘의 개념이 가물가물해져서 정리하고자 이 포스팅을 쓰게 됐다. 진짜 안 봐버릇하면 까먹는 건 손바닥 뒤집기보다 쉬운 것 같다.
먼저 생성자다. 생성자란 이름을 보면 뭔가를 만들어주는 사람이 떠오른다. 그럼 자바에서 생성자는 뭐하는 놈일까?
구글에서 이것저것 검색해보면 이런 내용이 나온다.
http://tutorials.jenkov.com/java/constructors.html
생성자 : 객체가 객체화 될 때 호출되는 특수 함수, 새 키워드를 사용할 때 자바 생성자의 목적은 새로 생성된 객체를 쓰기 전에 초기화하는 것이다. 생성자는 해당 클래스의 인스턴스(객체)를 초기화한다. 일반적으로 생성자는 초기화가 필요한 객체의 필드를 초기화한다.
생성자 : 객체가 생성될 때 자동으로 호출(new 명령어를 만났을 때)되며 객체를 초기화한다, 클래스명과 같은 함수명, 리턴형이 없고 인스턴스 변수(클래스 내부 변수)의 초기화 담당, 중복정의 될 수 있음(=생성자 오버로드), 생성자를 정의하지 않으면 컴파일러가 디폴트 생성자를 만들어 호출한다.
https://zzdd1558.tistory.com/112
생성자 : 클래스명과 같은 이름을 가진 메서드, 반환형이 선언돼 있지 않고 반환하지도 않는 메서드. 즉 함수명이 클래스명과 같고 void나 int처럼 반환형이 없고 리턴값도 없으며, 입력만 있고 출력은 없는 함수. 초기화 작업만 한다.
기타 다른 포스팅에서도 생성자에 대해 말하지만 공통된 내용은 아래와 같다.
- 생성자는 클래스 이름과 같은 이름의 함수다.
- 생성자는 void, int 등의 반환형이 선언돼 있지 않아서 리턴값이 없다.
- 생성자는 중복정의될 수 있다.
- 생성자는 객체를 초기화하는 작업만 하는 함수다.
- 생성자를 정의하지 않으면 컴파일러가 알아서 디폴트 생성자를 만들어 사용한다.
그럼 생성자는 어떻게 쓰는 것일까?
객체를 선언할 때 보통 이렇게 한다.
클래스명 객체명 = new 클래스명();
여기서 '클래스명()' 부분이 생성자다. 즉, 우리는 객체를 만들면서 무의식적으로 생성자를 쓰고 있던 것이다.
이 때 클래스명 뒤의 소괄호에는 아무것도 적지 않는 게 대부분이지만, 안드로이드 공부를 하다 보면 이 안에 this 등의 키워드 혹은 어떤 값을 넣어줄 때가 더러 있다.
생성자에 값을 넣는 것은 클래스의 객체를 만들 때, 내가 입력해준 값을 갖는 객체를 만든다는 뜻이 있다고 생각한다.
그럼 this는 뭘까? 이것이란 뜻의 영단어긴 한데 자바에서는 어떻게 쓰이는 것인가?
this는 현재 객체(자기 자신)을 참조하는 키워드라고 한다. 자기 자신을 참조한다? 뭔 소린지.
코드로 예를 들어보자. 아래는 코드 및 참고한 사이트다.
http://hong.adfeel.info/backend/java3/
Car라는 클래스가 있다. String과 int형 변수를 하나씩 갖고 있고, String 변수를 받는 생성자를 갖고 있다.
그런데 n이라 써져 있어서 이 변수가 뭘 의미하는지는 감이 안 온다. 그래서 name으로 바꿨다.
그런데 이렇게 쓰니 이 name이 저 name이랑 뭐가 다른지 모르겠다.
a=b는 오른쪽에서 왼쪽으로 읽으니까 오른쪽의 name은 () 안에 있는 String name이 될 것이다.
그럼 좌항의 name은 Car 클래스의 변수가 되어야 하는데 이 구분을 어떻게 해야 할까?
여기서 this가 나온다.
이렇게 적으면 왼쪽의 this.name은 Car 클래스의 String name 변수고, 오른쪽의 name은 소괄호 안에 있는 String name이란 것을 알 수 있다. 컨트롤을 누르고 각 name을 눌러보면 어떤 곳의 name인지 확인할 수 있다.
즉, this는 객체 자기 자신을 의미하기 때문에 this.name은 Car 객체의 name 필드, Car 클래스의 String name 변수를 가리키는 것이다.
처음 자바를 공부할 때 this와 생성자가 무슨 뜻인지 몰라서 머리 아팠는데 간만에 봐도 머리 아픈건 매한가지다. 이해되는 것 같은 기분만 들 뿐이다. 계속 까먹지 않게 유지보수하는 공부가 필요하다.