코딩 기록들
[Java Programming] 5.1 생성자 본문
생성자
- 클래스를 인스턴스로 만들어주는 특별한 메소드
- 반드시 new 라는 키워드로 호출해야함
- 생성자이름은 인스턴스로 만드려는 클래스의 이름과 동일해야함 (타입과 생성자의 이름이 같아야 함)
- 안써도 됨 & 초기값을 주고싶을때 사용!
- 생성자는 반환타입이 없음 : public 클래스명() 으로 선언하고, 반환타입이 없는 메소드이기 때문에, return 키워드X (필요한경우 파라미터값은 줘야함. 반환타입이 없는거랑 파라미터 주는거랑 헷갈리지말것)
Car car = new Car();
CraneGameMachine cgm = new CraneGameMachine();
생성자를 정의하지 않았는데, 호출이 가능한 이유
-> 생성자가없는 클래스를 작성하면 -> '기본생성자'가 자동 추가됨
- 어떠한 형태의 생성자라도 클래스에 정의되어있다면, 이 과정에서 파라미터가 없는 기본생성자는 생성되지 않음
- ConstructorTest.java -
public class ConstructorTest {
}
- ConstructorTest.class - > 자동추가됨
public class ConstructorTest {
public ConstructorTest() {
}
}
생성자를 직접 만드는 이유
1. 멤버변수를 초기화 하기 위해(멤버변수에 기본값(초기값)을 별도로 할당을 하기 위해)
- 특히, Reference Type 위주로 초기화
- ex) 배열, 컬렉션
2. 인스턴스 생성과 동시에 다른 메소드를 호출하기 위해서 사용
- ex) 인스턴스를 생성함과 동시에 insertMoney메소드를 호출하기 위해
Java파일이 실행되는 과정
- java파일의 실행을 위해서는 바이트코드로 변환되어야함
- > 바이트코드 변환시 생성자정의가 안되어있다면 -> 기본생성자를 자동으로 생성해줌
ex) 자바 소스 코드 -> 컴파일 (.class 해주어서 기계가 알아볼 수 있게 바뀜) & 컴파일할때 생성자 유무 체크하고, 없다면 기본생성자를 컴파일러가 개입하여 생성자 추가함
바이트코드란?
- JVM에서 동작이될수있게 구성되어있는 코드 (java파일을 바이트코드로 변경한 후 변경된파일을 JVM에서 실행)
- java파일을 바이트코드로 변경하는 과정 = 컴파일
이렇게 .class 파일들 = 컴파일 된 파일들 을 열어보면 사람은 이해하기 힘든 모습을 볼수있다
this = 생성자가 만들어준 인스턴스
this
- 파라미터로 전달된 값들은 멤버변수에게 할당되어야 하므로, 이러한 경우 this 사용
public class CoffeeShop {
int iceAmericano;
int hotAmericano;
public CoffeeShop(int iceAmericano, int hotAmericano) {
this.iceAmericano = iceAmericano; // 멤버변수에 초기값 할당
this.hotAmericano = hotAmericano; // 멤버변수에 초기값 할당
}
CoffeeShop cs = new CoffeeShop(4000, 3000);
-> 여기에서 cs 가 가리키는것 : this
this의 의미 : 현재 호출되고있는 인스턴스
- 생성자 내부에서 : 생성자가 만든 인스턴스 객체를 가리킴
- 메소드 : 호출하는 메소드 의 (.) 앞 에 있는거, 점연산자를 사용한 인스턴스 객체
데이터 클래스 (Data Class)
- 멤버변수만 존재하는 클래스
- 기능이 없는 클래스
- VO(value object)클래스로 부름
- 만드는 방법 : 클래스를 만들고, 멤버변수(와 생성자) 만 씀
- Java14 부터 Data Class 를 쉽게 정의할 수 있게 됨
--> public record Coffee(String name, int price){}
---> 잘 안씀 : 실무에서는 자바10이상의 버전을 사용하지 않음(안정성 떨어짐, )
reference = 생성자 호출시에만 메모리에 쓰여짐
orderedDrink = 반환시키는 상품
null : 변수는 만들겠지만, 실제 메모리에 쓰여지는것은 만들지 말아라
유틸리티 클래스
- 기능만 존재하며, 속성이 없음
- 물리적으로는 존재할수없지만, OOP에서는 흔하게 사용됨
'Java' 카테고리의 다른 글
[Java Programming] 6.2 클래스 다이어그램 & Vending Machine 예제 (0) | 2024.01.24 |
---|---|
[Java Programming] 6.1 클래스 변수 / 메소드 (0) | 2024.01.24 |
[Java Programming] 5.2 패키지, 접근제어지시자, 정보은닉&캡슐화 (0) | 2024.01.23 |
[Java Programming] 4.2 클래스와 인스턴스 (0) | 2024.01.22 |
[Java Programming] 4.1 (반환하는) 메소드 (0) | 2024.01.22 |