Study📚/Java

자바 - 생성자(Constructor)

woo!na 2023. 9. 13. 21:56

날 미치게 했던(하는) 생성자 사실 지금도 이게 정확히 뭔지 잘 모르겠다.
차근차근 정리 해봅시다~

하지만 이 글이 그 어떤 누군가에게도 도움이 되진 않을테니 혹 누군가 검색으로 들어오게 된다면 뒤로가기를 한 뒤 다른 똑똑선배님들의 설명을 참고해주시길 바랍니다
친구와의 약속을 지키고 월요일에 칼퇴하기 위해 쓰는 글임

class Aclass {
	// 대충 안에 있는 무언가
}


public class Constructor {
	public static void main(String[] args) {
		Aclass ac = new Aclass();		// 이 코드를 작성하면서 처음 생성자라는 단어가 등장했음
	}
}


내가 처음 만났을때 생성자 >> new << 이놈이 생성자인줄 알았답니다 왜냐하면!

1. ‘생성자’ 라는 호칭?명칭?이 너무나도 정해진 형태가 있어보이게 생겼고
2. 생성 -> 무엇인가 만든다는 뜻.. 너무나도 new 를 가리키고 있음

그래서 저 코드를 작성하면서 생긴 나의 편협한 사고방식이 반영된 시야
Aclass ac = new Aclass(); 앞 뒤 요소들은 뭔 소린지 모르겠고 생성자 = new 라는 인식이 박혀버림😊


하지만 이제 저는 알죠
1. 생성자는 메서드다
2. new는 생성자가 아니라 메소드다(나쁜넘)
3. new도 무엇인가 생성하긴 하지만 new가 생성하는 것은 인스턴스다 그리고 일단 생성자는 만들어지는게(?) 아니었음

여기까지는 오케이… 런데런데그런데 저는 이해가 안 되면 다음으로 절대 못 넘어가는 개꼰대타입으로🥲 여기서 큰 산을 마주합니다

1. 생성자의 역할은 그래서 무엇이며 왜 사용해야 하는가?
2. 인스턴스가 머에여??

지금은 1번과 2번을 한 질문으로 합칠 수 있다는 것을 알지만(아마도, 100%는 아님 또 내가 멍청했을지도) 저 당시에는
생성자가 모야? -> 아~ 근데 인스턴스는 모야?? -> 아~~~ 근데ㅜ 그럼 생성자가 뭐야? 의 무한 반복이었음 to my friends. very sorry. from me



1. 인스턴스(Instance)란?
- 클래스로부터 만들어진… 어떤… 그 어떤 것ㅜ 인스턴스가 모에요?ㅠ 포토샵에서 유용한 layer 라고 생각하면 된다고 배웠는데 인스턴스가 뭔지 머릿속에서 흐릿하게… 실루엣만 있고 몰라요ㅜ 잘 모르겠어요
이렇게 차근차근 쌓이다보면 언젠가 뭐라고 스스로 정의 할 수 있겠죠 love my self…🤍
우선은! class는 설계도, 이 설계도를 main() 메소드를 담고있는(아직 저는 main() 메소드가 짱이라고 알고있는 뉴비이기 때문에 대충…) 외부 class에서 직접적으로 가져다 사용할 수 없으니 설계도의
설계도의……….
청..청사진? 아닌데 암튼 설계도를 사용하기 위한 레이어가 바로 인스턴스

Aclass ac = new Aclass();
- Aclass 타입의 (클래스도 변수의 타입이 될 수 있다)

Aclass ac = new Aclass();
- 참조변수 이름 ac. 당연히 aclass, aplus, apple 모두 가능
여기까지 이제 메모리에 참조변수 ac를 위한 공간이 마련됨 근데 텅~

Aclass ac = new Aclass();
- 인스턴스를 생성하는 연산자 new. 날 혼란에 빠뜨린 나쁜넘.

Aclass ac = new Aclass();
- new 연산자에 의해 Aclass의 인스턴스(레이어)가 생성되었고 위에서 만들어진 빈 공간에 생성됐다 아마도 주소가 저장될걸?!?! 여기서 나오는 Aclass()가 바로바로 생성자

이렇게 Aclass의 인스턴스가 생성되면 main() 메소드에서 Aclass(설계도) 뭐 암튼 사용이 가능함 인트형 변수 x가 설계도 안에 있다고 치면
System.out.println(ac.x);
이롷게


그!!래!!!서!!!! 지금부터가 반전
2. 생성자가 무엇이냐 그래서
여기까지 열심히 타자 치면서 인스턴스가 뭔지 이해를 했어요. 그 인스턴스에 들어있는 변수들을 초기화하기 위한 특별한 메소드가 바로 생성자

저 ‘인스턴스 변수를 초기화하기 위한’ 이라는 말이 너무 날 힘들게 했는데 그 이유가 난 default 생성자만 냅다 바라보고 있었기 때문이었기 때문이었기 때문이었기
Cat 이라는 클래스에 나이, 이름, 몸무게 라는 변수가 있다면

- 디폴트 생성자 Cat(); 로 인스턴스를 생성했을때
인스턴스 생성하고

c1.age = 11;
c1.name = “귀요미“;
c1.weight = “비밀이런거민감하니까물어보지마세요”;

c2.age = 10;


아~ 귀찮아~
이런식으로 하나하나 초기화를 해줘야하는데

- 사용자 정의 생성자를 하나 만들거에용

Cat(int a, String b, double c)
{
	age = a;
	name = b;
	weight = c;
}

//—————————————————————다른공간입니다—————————————————————-
Cat c1 = new Cat(11, ”나비“, ”약간통통함더자세하게물어보지마세요”);


이거로 끝남!! 와~ 간단하다~~

우나야 기억해 저건 변수를 생성하는게 아니라 인스턴스 변수를 초기화 하는 거야 또 원점으로 돌아가지 마렴
그럼왜이름을생성자로지은거죠?ㅡㅡ

- 생성자 내부에서 다른 생성자 호출하기 this 사용
이거는… 기본값을 지정하기 위해 사용하는 거라고 우선은 이해했어용 몰라… 아냐 할 수 있어

Cat()
{
	this(0, “non”, 0);
}

cat 인스턴스를 생성할때 매개변수로 아무것도 안 넣으면… 기본으로 0살 이름 non 0키로 로 만들어지게…

이상입니다
this 정리는 나중에 이어서 해볼게용

'Study📚 > Java' 카테고리의 다른 글

자바 - Scanner 의 nextInt() 사용시 try ~ catch 무한반복  (0) 2023.10.18
자바 - 반복문 연습(별 찍기)  (0) 2023.09.26
자바 - 조건문과 반복문  (0) 2023.09.25
자바 - 입출력  (0) 2023.09.25
자바 - 변수(variable)  (0) 2023.09.24