*이 포스팅은 <신한투자증권 프로디지털아카데미> 김송아 강사님의 강의 기반으로 작성되었습니다.
개요
https://gpdbs9409.tistory.com/70
객체지향이 뭐라고 생각하세요?
*이 포스팅은 김송아 강사님의 강의 기반으로 작성되었습니다. 개요개발자는 프로그램 전반을 설계할 줄 아는 사람이어야 한다. 문제를 추상화 해서 핵심을 뽑아 내고 가이드라인을 제공할 수
gpdbs9409.tistory.com
지난번에 이 포스팅에서 객체는 무엇이고 클래스는 무엇일까?
라는 것에 대해 다뤄보았는데, 그럼 실제 프로젝트에서 객체생성을 어디서 해야할지 생각보자.
Main class에서 해도 될까?
클래스 분류
클래스는 크게 두 가지로 쪼갤 수 있다.
1.실행용 클래스 : main 메소드를 가지는 클래스
public class Main {
public static void main(String[] args) {
Car tesla = new Car("Tesla Model 3"); //이런식으로 main 클래스의 main함수에서 생성할까?
Person yoon = new Person(tesla);
yoon.driveCar();
}
}
2.라이브러리용 클래스 : main 메소드를 가지지 않는 클래스 =>객체화
public class Person {
private Car car;
public void buyCar() {
this.car = new Car(); // 아니면 일반 class내에서?
}
}
우리는 1과 2 중 어디서 객체를 생성해야할까?
답은 1번이다.
왜 2번에서 객체를 생성하면 안되냐구?
지난 글에서 설계에서 마법의 답변은 "유지보수"와 "확장성"이라고 했다.
이유 1.
2번 클래스에서 객체를 만들어버리면,
다른 메소드 또한 저 설계도에서 생성된 객체를 쓰지 못한다.
이유2.
만약에.. 저 Person 안에 new car로 객체 생성을 했는데, car가 다른 api등을 참고하는 무거운 객체라면?
불필요하게 무거운 객체가 person이 여러개 만들어질 때마다 따라다녀야한다.
그래서
public class Car {
private String model;
public Car(String model) {
this.model = model;
}
public void drive() {
System.out.println(model + "을(를) 운전합니다.");
}
}
public class Person {
private Car car;
// Person은 Car를 직접 만들지 않고 외부에서 받아옴
public Person(Car car) {
this.car = car;
}
public void driveCar() {
car.drive();
}
}
이런식으로 객체 생성은 하지 않되, person안에 car를 외부에서 받아오는 식으로 의존성만 주입해준다.
그리고 main에서 이렇게 쓴다..
public class Main {
public static void main(String[] args) {
Car tesla = new Car("Tesla Model 3"); // ✅ Main에서 생성
Person yoon = new Person(tesla); // ✅ 주입 (DI)
yoon.driveCar();
}
}
cf) 생성자 퀴즈
Q1. 생성자는 객체가 살아있는 동안 언제든 호출할 수 있다. X
=> 생성될때만 호출 가능함! !
Q2. 기본 생성자는 생략할 수 있다. O
=>있음
Q3. 생성자를 호출할 때 메모리에 객체가 올라간다 O
Q4. '수동' 소멸자가 있다. X
(GC가 대신 해줌)
FINALIZER라고 수동으로 소멸자 할 수 있지만, 권하지는 않는다.
'백엔드 엔지니어링 > Spring Boot' 카테고리의 다른 글
| [Spring Boot 기초]JVM이란? (6) | 2025.08.15 |
|---|---|
| [Java]Collection? (5) | 2025.08.15 |