관리 메뉴

나만을 위한 블로그

[JAVA] 생성자란? this란? 본문

JAVA

[JAVA] 생성자란? this란?

참깨빵위에참깨빵_ 2020. 3. 18. 18:53
728x90
반응형

둘의 개념이 가물가물해져서 정리하고자 이 포스팅을 쓰게 됐다. 진짜 안 봐버릇하면 까먹는 건 손바닥 뒤집기보다 쉬운 것 같다.

 

먼저 생성자다. 생성자란 이름을 보면 뭔가를 만들어주는 사람이 떠오른다. 그럼 자바에서 생성자는 뭐하는 놈일까?

구글에서 이것저것 검색해보면 이런 내용이 나온다.

 

http://tutorials.jenkov.com/java/constructors.html

 

Java Constructors

A Java constructor is a special method that is called when you create an instance (object) of a Java class. The purpose of a Java constructor is to initialize the Java object before the object is used. This Java constructor tutorial explains how you declar

tutorials.jenkov.com

생성자 : 객체가 객체화 될 때 호출되는 특수 함수, 새 키워드를 사용할 때 자바 생성자의 목적은 새로 생성된 객체를 쓰기 전에 초기화하는 것이다. 생성자는 해당 클래스의 인스턴스(객체)를 초기화한다. 일반적으로 생성자는 초기화가 필요한 객체의 필드를 초기화한다.

 

https://sfeg.tistory.com/106

 

java 자바 생성자 this

생성자(Constructor) - 객체가 생성될때 자동으로 호출(new 명령어를 만났을때) 되며 객체를 초기화한다. - 클래스명과 동일한 메소드 - 생성자는 리턴형이 없습니다 . - 생성자의 역할은 인스턴트변수(클래스 내..

sfeg.tistory.com

생성자 : 객체가 생성될 때 자동으로 호출(new 명령어를 만났을 때)되며 객체를 초기화한다, 클래스명과 같은 함수명, 리턴형이 없고 인스턴스 변수(클래스 내부 변수)의 초기화 담당, 중복정의 될 수 있음(=생성자 오버로드), 생성자를 정의하지 않으면 컴파일러가 디폴트 생성자를 만들어 호출한다.

 

https://zzdd1558.tistory.com/112

 

Java 생성자란 무엇인가 ?

생성자란? 1. 클래스 이름과 동일한 이름을 가진 메소드 2. 반환형이 선언되어 있지 않으면서, 반환하지 않는 메소드 즉, 메소드 이름이 클래스명과 똑같고, void나 int 처럼 반환형이 선언되어 있지도 않고 , 리..

zzdd1558.tistory.com

생성자 : 클래스명과 같은 이름을 가진 메서드, 반환형이 선언돼 있지 않고 반환하지도 않는 메서드. 즉 함수명이 클래스명과 같고 void나 int처럼 반환형이 없고 리턴값도 없으며, 입력만 있고 출력은 없는 함수. 초기화 작업만 한다.

 

 

기타 다른 포스팅에서도 생성자에 대해 말하지만 공통된 내용은 아래와 같다.

 

  • 생성자는 클래스 이름과 같은 이름의 함수다.
  • 생성자는 void, int 등의 반환형이 선언돼 있지 않아서 리턴값이 없다.
  • 생성자는 중복정의될 수 있다.
  • 생성자는 객체를 초기화하는 작업만 하는 함수다.
  • 생성자를 정의하지 않으면 컴파일러가 알아서 디폴트 생성자를 만들어 사용한다.

그럼 생성자는 어떻게 쓰는 것일까?

객체를 선언할 때 보통 이렇게 한다.

 

클래스명 객체명 = new 클래스명();

 

여기서 '클래스명()' 부분이 생성자다. 즉, 우리는 객체를 만들면서 무의식적으로 생성자를 쓰고 있던 것이다.

이 때 클래스명 뒤의 소괄호에는 아무것도 적지 않는 게 대부분이지만, 안드로이드 공부를 하다 보면 이 안에 this 등의 키워드 혹은 어떤 값을 넣어줄 때가 더러 있다.

생성자에 값을 넣는 것은 클래스의 객체를 만들 때, 내가 입력해준 값을 갖는 객체를 만든다는 뜻이 있다고 생각한다.

 

그럼 this는 뭘까? 이것이란 뜻의 영단어긴 한데 자바에서는 어떻게 쓰이는 것인가?

 

this는 현재 객체(자기 자신)을 참조하는 키워드라고 한다. 자기 자신을 참조한다? 뭔 소린지.

코드로 예를 들어보자. 아래는 코드 및 참고한 사이트다.

 

http://hong.adfeel.info/backend/java3/

 

java - 생성자, this, 오버로딩, 패키지 - hong's blog

1.생성자 모든 클래스는 인스턴스화 될때 생성자를 사용한다. 생성자 특징 생성자는 리턴타입이 없음 생성자를 프로그래머가 만들지 않으면 매개변수가 없는 생성자가 컴파일 할 때 자동으로 만들어짐 매개변수가 없는 생성자를 기본생성자라고 함 생성자를 하나라도 프로그래머가 만들었다면 기본생성자는 자동으로 더보기…

hong.adfeel.info

 

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와 생성자가 무슨 뜻인지 몰라서 머리 아팠는데 간만에 봐도 머리 아픈건 매한가지다. 이해되는 것 같은 기분만 들 뿐이다. 계속 까먹지 않게 유지보수하는 공부가 필요하다.

반응형
Comments