KOSA fullStack 교육 3일차(객체 생성의 원리 및 생성자)
1. 객체 생성의 원리와 Memory Allocation
실제 세계 -----------> 소프트웨어
실제 서비스를 잘 파악해야 소프트웨어 개발을 잘 한다.
객체 생성 원리
ex) 긴팔T, 발팔T, 나시T 의 객체가 있고, 이를 소프트웨어로 표현한다면
모두 아우르는 단어를 생각해보자. - 셔츠, 클로징, 탑웨어?
**Class는 여러가지 서로 다른 객체를 생성할 때 Type으로 사용된다!
Shirt라는 클래스로 만들 수도 있고, Clothing이라는 클래스로도 만들수 있음
Clothing이 더 추상화 된 개념, 일반화된 개념 (포괄적임)
//Shirt로 만들었다면, longSleeved타입 중요하다.
Shirt longT = new Shirt();
Shirt shortT = new Shirt();
Clothing t = new Shirt(); //가능하다!! 클래스는 단지 타입으로 사용되기 때문에
Car t = new Shirt(); //불가능하다!! 일반화가 안된다
2. 생성자
생성자란 객체가 생성될때마다 동작하는 것이다.
Shirt t = new Shirt();
java에서 세미콜론의 기능
1. calling(호출)
2. 문장의 종결
만약 객체 생성과 동시에 필드 초기화를 하고 싶을 때, 생성자에 인자값을 넣어서 필드초기화를 할 수 있다.
한마디로, 필드에 값이 주입되는 통로는 다음과 같이 용도에 따라 2가지 뿐이다.
1. 생성자
- Car 객체를 생성할 때 엔진(객체)를 초기화 할 때는 생성자가 좋다. 즉, 라이프 사이클을 같이할 때는 생성자로 초기화하는 것이 좋다.
(처음 필드초기화 후 변경이 없을때)
2. set메소드()
- Car 객체를 생성할 때 네비게이터(객체) 초기화는 setter 메소드가 좋다. 변경이 자주 일어나기 때문이다.
**생성자는 메소드가 아니다. (메소드 특징인 반환형이 없는 것을 보면 알 수 있다)
즉, 생성자는 클래스의 구성요소(멤버)가 아니기 때문에 메모리에 올라가는 대상이 아니다.
**생성자 앞의 접근지정자는 Class 접근지정자를 따라 간다.
즉, private Class 면 생성자도 private이다.
Memory Allocation 순서
Shirt s = new Shirt("a",100,true);
1. 스택에 s라는 공간이 만들어진다.
2. 힙 영역에 클래스의 필드를 위한 공간이 만들어지면서 디폴트값이 들어간다.(=묵시적 초기화)
3. 힙의 주소값이 만들어진다 (라벨링 주소값)
4. 스택 s에 힙의 주소값이 할당된다.
5. 스택에 있는 s라는 변수가 heap에있는 객체를 참조하게 됨. (s를 참조 변수라고 한다)
6. "a", 100, true 값으로 초기화가 된다. 즉, 오버라이트된다.(명시적 초기화)/ 생성자 구동에 의한 초기화