☕ Java & Spring Boot 기초 개념 정리: 객체 생성, 디자인 패턴, null 타입까지
2주차는 Java와 Spring Boot의 기초를 탄탄히 다지는 시간을 가졌습니다. 특히 이번 주는 객체지향 프로그래밍(OOP)의 기본 내용과 디자인 패턴, 그리고 JVM 동작 방식 등을 이해하는 데 집중했습니다.
📌 Spring Boot의 기본 구조 이해
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
@SpringBootApplication은 Spring Boot의 진입점을 의미하는 최상위 어노테이션입니다.- Java 애플리케이션은 반드시
main()메서드가 있어야 실행되며, 없을 경우 오류가 발생합니다.
📦 객체 배열과 메모리 구조
Tv[] tvArr = new Tv[3];
tvArr[0] = new Tv();
tvArr[1] = new Tv();
tvArr[2] = new Tv();
- 객체 배열은 참조 변수 배열로, 각 인덱스마다
new연산자로 인스턴스를 생성해야 정상 동작합니다. - 자바 메모리 구조:
- 클래스 영역: 클래스가 메모리에 로드될 때 생성
- 인스턴스 영역: 객체 생성 시 할당
- 메서드 영역: 호출될 때 생성되어 종료 시 소멸됨
변수 구분
| 변수 유형 | 생성 시점 | 키워드 |
|---|---|---|
| 인스턴스 변수 | 객체 생성 시 | 없음 |
| 클래스 변수 | 클래스 로딩 시 | static |
| 지역 변수 | 메서드 실행 시 | 없음 |
🎯 디자인 패턴: 싱글톤 & 빌더 패턴
1️⃣ 싱글톤 패턴 (Singleton Pattern)
public class MySingleton {
private static final MySingleton INSTANCE = new MySingleton();
private MySingleton() {}
public static MySingleton getInstance() {
return INSTANCE;
}
}
✅ 특징
- 인스턴스를 하나만 생성해 재사용함으로써 메모리 효율을 높임
private 생성자,static final,getInstance()메서드를 통해 패턴 완성
⚠️ 주의점
- 전역 공유로 인해 테스트가 어려움
- 멀티스레드 환경에서는 동기화 필요
🔧 사용 사례
- 로깅 시스템
- DB 커넥션 풀
- 캐시 관리자 등
2️⃣ 빌더 패턴 (Builder Pattern)
F1Car hyundia = new F1Car.Builder()
.buildEngine("f1")
.buildTeam("redbull")
.buildWheel("shoes")
.build();
📌 장점
- 복잡한 객체 생성을 체이닝 방식으로 명확하게 구성
- 유연성, 가독성, 객체 불변성 유지에 유리
구성 요소
- Builder 내부 클래스를 통해 외부에서는 직접 객체 생성 불가
- 체이닝 메서드를 활용해 객체 속성을 설정하고
.build()로 객체 생성
❗ null의 타입? - JVM과 ZeroFill 방식
강사님의 질문: "null의 타입은 무엇인가요?"
이에 대한 해답을 찾기 위해 JVM 메모리 구조와 초기화 방식을 학습했습니다.
- null의 타입은 자바 컴파일러 관점에서 최저 자손 타입(null type) 으로 인식됩니다.
- 자바는 ZeroFill 방식을 채택해 객체 생성 시 모든 값을 0으로 초기화합니다.
- 이는 안정성을 높이는 한편, 미초기화 변수를 방지하는 효과도 있습니다.
✨ 그 외 배운 개념들
- static 키워드: 클래스 변수, 정적 블록 등 정적 메모리 공간을 의미
- final 키워드: 상속 불가, 오버라이드 불가 등 제한적 사용
- 인터페이스와 추상 클래스 차이: 인스턴스 변수 유무
- 상속 구조: 자바는 단일 상속만 지원,
Object클래스는 모든 클래스의 조상 - 재귀 함수: 메모리 스택을 고려한 사용 필요
- 메서드 vs 함수: 클래스 내부 존재 여부로 구분
- import static: 클래스 생성 없이 메서드 사용 가능
🔍 2주차 학습 인사이트
이번 학습을 통해 Java의 구조적인 특성과 객체 생성, 메모리 처리 원리에 대해 한층 더 깊이 이해할 수 있었습니다. 특히 디자인 패턴은 단순한 코드 활용이 아닌 설계 철학의 일부라는 점에서 앞으로의 프로젝트에 큰 영향을 줄 것입니다.
강사님의 “null의 타입은 무엇일까?”라는 질문은 매우 인상 깊었고, 이를 통해 JVM의 기본 동작 방식과 메모리 초기화 원리에 대해 기초를 다시 다지는 좋은 계기가 되었습니다.
'패스트캠퍼스 국비지원 주간 학습 블로그' 카테고리의 다른 글
| 6주차 부트캠프 회고 (3) | 2025.07.27 |
|---|---|
| 5주차 부트캠프 회고 (4) | 2025.07.20 |
| 4주차 백엔드 부트캠프 회고 (2) | 2025.07.13 |
| 3주차 부트캠프 회고 - 토끼가 짱이야 (2) | 2025.07.04 |
| 백엔드 13기 1주차 - 자바(Java)와 객체지향의 기초 (1) | 2025.06.20 |