# TIL - 2026.08.13

ssls·2026년 8월 13일

📌 오늘 학습한 주제

  • Java 배열(Array) 기본 개념 및 향상된 for문(Enhanced for loop) 순회 (AryApp.java)
  • 객체 배열(Object Array) 선언 및 null 예외 처리
  • 객체지향 상속(Inheritance) 및 super 키워드를 활용한 부모 생성자/메소드 호출 (StudentDTO.java, TeacherDTO.java, ManagerDTO.java)
  • 메소드 오버라이딩(Method Overriding)을 통한 다형성 기초 체계 다지기

💡 오늘 배운 것 — 나만의 언어로

① 오늘의 목표

  • Java 고정 길이 배열의 특징과 객체 배열 제어법을 익히고, 상속 관계(extends)를 활용해 공통 속성을 재사용하면서 메소드 오버라이딩을 적용해 보기

② 학습할 내용

  • 배열과 향상된 for문 (AryApp.java): 동일한 데이터 타입만 담는 고정 길이 참조 타입인 배열의 특성을 이해하고, 기본 for문과 향상된 for문(for(Type item : array))을 사용해 요소를 순회하는 법을 배웠다. 객체 배열 순회 시 null 접근에 의한 NullPointerException 방지 예외 처리 조건문도 실습했다.
  • 클래스 상속과 super 키워드 (StudentDTO, TeacherDTO, ManagerDTO): 공통 부모 클래스인 PersonDTOextends로 상속받아 자식 클래스에서 부모 생성자 super(name, age, address)를 호출하여 멤버 변수를 초기화했다.
  • 메소드 오버라이딩 (@Override): 부모 클래스의 personInfo() 메소드를 자식 클래스 특성(ssn, subject, dept)에 맞춰 재정의함으로써 고유 정보까지 결합된 문자열을 출력하도록 확장했다.

💻 오늘 핵심 코드

1. 객체 배열 순회 및 null 예외 처리 (AryApp.java)

import features.blogs.domain.dto.BlogResponseDTO;

public class AryApp {
    public static void main(String[] args) {
        // 객체 배열 생성
        BlogResponseDTO[] blogsAry = new BlogResponseDTO[10]; 

        BlogResponseDTO response = BlogResponseDTO.builder()
                                        .status(200)
                                        .message("good")
                                        .build();
        blogsAry[0] = response;
        blogsAry[1] = response;

        // 향상된 for문 및 null 예외 처리
        for(BlogResponseDTO data : blogsAry) {
            if(data == null) {
                break; // null 요소를 만나면 순회 중단
            }
            System.out.println(data.getMessage()); 
        }
    }
}

2. 상속과 super 키워드 및 메소드 오버라이딩 (StudentDTO.java)

package features.oop.sub;

import features.oop.sup.PersonDTO;

// PersonDTO 부모 클래스 상속
public class StudentDTO extends PersonDTO {
    private String ssn;

    public StudentDTO() {}

    public StudentDTO(String name, int age, String address, String ssn) {
        // 부모 생성자 호출을 통한 공통 멤버변수 초기화
        super(name, age, address);
        this.ssn = ssn;
    }

    // 부모 메소드 personInfo() 오버라이딩
    @Override
    public String personInfo() {
        return super.personInfo() + ", ssn=" + ssn;
    }
}

🛠️ 실습 / 결과물 & 참고 자료

③ 실습 / 결과물

  • 강의 실습코드: AryApp.java, StudentDTO.java, TeacherDTO.java, ManagerDTO.java 파일 연동을 통해 객체 배열 제어와 상속 기반 서브 클래스 설계 실습 완성.

④ 참고 자료

  • Oracle Java Documentation: Java Arrays & Inheritance / Overriding Methods 예제 참고

🔍 문제와 해결

  • 막힌 부분: 객체 배열의 크기(length)만큼 순회 시 초기화되지 않은 요소 접근으로 인해 NullPointerException이 발생할 수 있는 현상 점검.
  • 해결 방법: 반복문 내부에 if (data == null) break; 조건을 추가하여 안전하게 객체 배열을 참조하도록 예외 안전성을 확보함.

🎯 다음에 할 일

  • 다형성(Polymorphic Argument / Upcasting) 개념을 적용하여 PersonDTO 배열 하나로 자식 객체 전체 관리해보기
  • 추상 클래스(abstract class)와 인터페이스(interface)의 특징 비교 학습하기
profile
성장중

0개의 댓글