Java 생성자

nero·2022년 5월 21일
0

Java-Basics

목록 보기
1/4
post-thumbnail

생성자란(constructor)?

생성자(constructor)는 new 연산자와 같이 사용되어 클래스로부터 객체를 생성할때 호출되어 객체의 초기화를 담당한다.
new 연산자에 의해 생성자가 생성되면 heap영역에 객체가 생성되고 객체의 주소가 리턴된다
리턴된 객체의 주소는 클래스 타입 변수에 저장되어 객체에 접근할 때 이용됨

객체 초기화란?

  • 필드를 초기화, 메소드를 호출해서 객체를 사용할 준비 하는것

언어적인 해석

⭐️ 부정확 주의 !!
이 내용은 정확하지 않다 한번 재미로 언어적인 해석해보고 싶었다

construct는

  1. 건설하다
  2. 구성하다

빌딩을 건설하는 그런 느낌에 단어다. 명사형은

constructor 란 그럼 생성자로 해석하지만 다른 말로 건설업자, 시공자 , 시공사라고도 해석할 수 있다

클래스란 무엇인가?
바로 설계도 아닌가 ! 그럼 나름대로 해석하자면 설계도를 가지고 일을 수행하는 건설업자 라고 볼 수 있을까?

A constructor is used in the creation of an object that is an instance of a class. Typically it performs operations required to initialize the class before methods are invoked or fields are accessed. Constructors are never inherited.

생성자는 클래스의 인스턴스인 객체 생성에 사용됩니다. 일반적으로 메서드가 호출되거나 필드에 액세스하기 전에 클래스를 초기화하는 데 필요한 작업을 수행합니다. 생성자는 절대 상속되지 않습니다

인스턴스를 이해할 필요가 있는데

인스턴스는 클래스가 컴퓨터 메모리에 올라갈때 실체를 의미한다

나름대로 해석해보자면 객체지향에서 클래스가 실체화하기 위해선 생성자가 있어야하는데 생성자는 즉 도면을 가지고 일을하는 일꾼이라고도 볼 수 있지 않을까?

그냥 재미로.. 하지만 생성자라고 많이 불리니 그냥 생성자라고 부르면 된다..

기본 생성자

모든 클래스는 생성자가 반드시 존재, 하나 이상 소유

만약 내부에 생성자를 생략하면 컴파일러는 기본 생성자를 바이트 코드에 자동 추가 시킨다.

Person person = new Person();
  • 명시적으로 선언한 생성자가 한개라도 있으면 컴파일러는 기본 생성자를 추가하지 않는다

생성자 선언

className (parameter, ...) {
	//객체 초기화 코드
}

특징

  • 메소드와 비슷
  • 클래스와 이름이 동일
  • 리턴 타입이 없음

필드 초기화

클래스로 부터 객체가 생성될때 필드는 기본 초기값으로 자동 설정

초기화를 하고 싶지 않다면?

초기값 설정 방법

  1. 필드를 선언할때 초기화값 주기
  2. 생성자에서 초기값 주기
// 필드를 선언할때  초기값

public class Korean {
	String nation = "대한민국"
	String name;
	String ssn;
}

public class Main {
	Korean k1 = new Korean();
  System.out.println(korean.nation);
	// 출력값: 대한민국
}

// 생성자를 통한 초기화 

public class Korean {
  //필드
	String nation;
	String name;
	String ssn;

	//생성자
	public korean(String nation, String name){
	  this.name = name;
		this.nation = nation;
   
  }
}

포인트

관례적으로 생성자 매개변수는 필드와 동일한 이름을 갖는다.

this는 객체자신의 참조인데 객체가 객체 자신을 this라고 생각하면 된다.

즉 this.필드는 this라는 참조변수로 필드를 사용하는 것과 동일하다.

출처

http://www.yes24.com/Product/Goods/15651484

profile
겸손하게 배우는 개발자입니다

0개의 댓글