본문 바로가기
패스트캠퍼스 국비지원 주간 학습 블로그

백엔드 13기 2주차 - 객체 생성, 디자인 패턴, null 타입

by LeeInGyu 2025. 6. 29.

☕ 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의 기본 동작 방식과 메모리 초기화 원리에 대해 기초를 다시 다지는 좋은 계기가 되었습니다.