GOORM-DEEP DIVE 백엔드 3회차 회고 DAY5

Cori1304·2025년 3월 4일
0

GOORM-DEEPDIVE

목록 보기
4/19

글을 쓰게된 배경

부트캠프에서 처음으로 java수업을 받고 있기에 기록하는게 좋다고 생각했고, 수업이 있는 날이면 매일 글을 쓰려고 합니다. 쵀대한 몰랐거나 필요하다고 생각되는 내용 위주로 기록할 예정입니다. (제가 게을러서 이러한 시도를 성공한 적이 없기에 이번 부트캠프 목표 중 1가지입니다. 할 수 있도록 화이팅!!)

chap5~6 수업 내용 정리

new 연산자

Java는 컴파일 언어이므로, 실행 전에 코드를 미리 컴파일하여 바이트코드로 변환해야 한다. 컴파일 과정에서는 코드가 문법적으로 올바른지 검사하고, 데이터 타입이 정확한지 확인한다. 이러한 특성 때문에, Java에서는 객체를 생성하기 전에 반드시 해당 객체의 클래스를 정의해야 한다.
이 과정에서 사용되는 것이 new이다.

new의 역할

  • 힙 메모리 할당: new 키워드는 힙 메모리에 객체를 위한 공간을 할당
  • 생성자 호출: new 키워드는 객체 생성 시 초기화를 담당하는 생성자(Constructor)를 호출
  • 객체 참조 반환: new 키워드는 생성된 객체의 메모리 주소를 반환

heap 메모리

힙(Heap) 메모리는 Java Virtual Machine(JVM)의 런타임 데이터 영역 중 하나로, 동적으로 생성된 객체들이 저장되는 공간입니다. 힙 메모리는 프로그램이 실행되는 동안 필요한 객체들을 유연하게 관리할 수 있도록 해준다.

heap에 저장되는 데이터

  1. 배열(Arrays):Java에서 배열은 객체로 취급됩니다.즉 new 키워드를 사용하여 저장한다
    (단 참조변수는 스택에 저장)
  2. 문자열 또한 String 클래스의 객체로 표현된다.
  3. 객체의 인스턴스 변수는 객체가 생성될 때 힙 메모리에 할당된다.
  4. Integer, Double, Boolean과 같은 래퍼 클래스
  5. 프로그램이 실행되는 동안 동적으로 생성되는 모든 데이터

NullPointerException

NullPointerException (NPE)은 가장 흔하게 발생하는 런타임 예외 중 하나이다. 이 예외는 객체 참조가 null인 상태에서 해당 객체의 필드 또는 메서드에 접근하려 할 때 발생한다.

String str = null;
int length = str.length(); // NullPointerException 발생

간단하게 예방하는 법

1. null 체크

String str = getSomeString(); // 외부에서 문자열을 받아오는 상황 가정

if (str != null) {
    System.out.println("문자열 길이: " + str.length());
} else {
    System.out.println("문자열이 null입니다.");
    // null에 대한 적절한 처리 (예: 기본값 할당, 예외 처리 등)
}
  1. 객체 초기화
public class MyClass {
    private String name;

    public MyClass(String name) {
        this.name = name; // 생성자에서 초기화
    }

    public String getName() {
        return name;
    }
}

// 사용 예시
MyClass obj = new MyClass("John");
System.out.println(obj.getName());
  1. 방어적 프로그래밍
public String processString(String str) {
    if (str == null) {
        return ""; // null 대신 빈 문자열 반환
    }
    return str.toUpperCase();
}

// 호출하는 쪽에서 null 체크
String result = processString(getSomeString());
if (result != null) {
    System.out.println(result);
}

initblock

init block은 클래스의 인스턴스 변수 또는 정적 변수를 초기화하는 데 사용되는 코드 블록으로 초기화 블록은 클래스 내에 {}로 둘러싸여 정의되며, 생성자보다 먼저 실행됩니다.

public class MyClass {
 static {  // 정적 초기화 블록
        System.out.println("정적 초기화 블록 실행");
    }
    
    {   // 인스턴스 초기화 블록
        System.out.println("인스턴스 초기화 블록 실행");
    }

    public MyClass() {
        System.out.println("생성자 실행");
    }
}

/*  초기화 순서
*  인스턴스변수 : 기본값 -> 명시적초기값 -> 인스턴스초기화블럭 -> 생성자
*  클래스변수 : 기본값 -> 명시적초기값 -> 정적초기화블럭 -> 인스턴스초기화블럭 -> 생성자
* */

배운 점

  • construct가 아닌 initblock을 사용해서 인스턴스를 생성한다는 것
  • java도 js처럼 배열이도 객체라는 것
profile
개발 공부 기록

0개의 댓글

관련 채용 정보