일단 이것저것 해 보는 블로그

(Do it! 자바, 4주차) JDK 기본 클래스와 컬렉션 프레임워크 (260126~260130) 본문

2026/Do it Java 스터디(2026.01.~02.)

(Do it! 자바, 4주차) JDK 기본 클래스와 컬렉션 프레임워크 (260126~260130)

뷔구룽 2026. 1. 25. 20:29

4주차 공부 인증

개요

4주차는, 자바 개발 환경에서 기본적으로 제공되는 클래스와 함께

프로그래밍 더 나아가 컴퓨터 과학의 기초가 된다는 자료 구조와 관련이 깊은 컬렉션 프레임워크가 등장한다.

이제는 자바의 기초 문법만 들고는 쉽게 이해하기 어려운 부분에 들어가는 느낌이다.

공부를 꾸준히 지속할 동기가 생기면서도 내게 부족한 점도 조금씩 보이기 시작한다.

 

사용한 학습 자료: 박은종, 2025, <Do it! 자바 프로그래밍 입문 [개정판]>, 이지스퍼블리싱.

https://ebook-product.kyobobook.co.kr/dig/epd/ebook/E000010942415

 

Do it! 자바 프로그래밍 입문 [개정판] | 박은종 저자

eBook Do it! 자바 프로그래밍 입문 [개정판] | 3만 6천 부 이상 팔린 초판의 성공에 힘입어 좀 더 입문자의 눈높이에 맞춰 내용을 수정하고 최신 개발 트렌드에 맞게 개정판을 출간했습니다. 저자인

ebook-product.kyobobook.co.kr

 

개념 요약 정리

<10장: 인터페이스>

아래 3주차 참고

(Do it! 자바, 3주차) 객체 지향 프로그래밍의 여러 기술 (260119~260124)

 

(Do it! 자바, 3주차) 객체 지향 프로그래밍의 여러 기술 (260119~260124)

개요 3주차는, 객체 지향 프로그래밍에서 중요하게 사용되는 특징(기술)들이 다뤄진다.2주차부터 계속 언급하지만 알아야 할 개념이 너무 많다... 차분히 곱씹어보자. 사용한 학습 자료: 박은종,

gyeonkangkim.tistory.com

(10장 되새김 문제 풀이: 미완성)

(Do it! 자바, 4주차-2) 10장 되새김 문제 풀이(작성 중)

 

(Do it! 자바, 4주차-2) 10장 되새김 문제 풀이(작성 중)

사용한 학습 자료: 박은종, 2025, , 이지스퍼블리싱.https://ebook-product.kyobobook.co.kr/dig/epd/ebook/E000010942415 Do it! 자바 프로그래밍 입문 [개정판] | 박은종 저자eBook Do it! 자바 프로그래밍 입문 [개정판] |

gyeonkangkim.tistory.com

 

<11장: JDK 기본 클래스>

* java.lang 패키지: 자바 프로그래밍의 가장 기본적인 클래스 패키지

 

1) Object 클래스: 모든 클래스의 최상위 클래스. 모든 클래스는 Object 클래스의 상속을 받으며 extends Object 예약어를 사용하지 않아도 컴파일 과정에서 자동으로 확장됨. 클래스의 메서드 중에서는 재정의가 가능한 것과 불가능한 것이 있는데...

    (자주 재정의하여 사용하는 주요 메서드)

    - toString(): 객체 정보를 문자열로 바꾸는 메서드

    - equal(): 객체의 같음을 비교하는 메서드

-> 주로 물리적 동일성(두 인스턴스가 가리키는 메모리 주솟값이 같음)뿐 아니라 논리적 동일성(두 인스턴스가 논리적으로 같음)을 구현할 때 재정의해 사용.

예) "뷔구룽" 학생 정보가 담긴 두 인스턴스가 가리키는 주솟값이 같음: 물리적 동일성

두 인스턴스가 가리키는 주소가 다르지만 둘 다 동일한 "뷔구룽" 학생 정보를 담고 있을 때: 논리적 동일성 구현 필요

    - hash(): 객체의 해시 코드 확인 메서드 * 해시: 정보를 저장하거나 검색할 때 사용하는 자료 구조(해시 함수 사용해 구현)

* 두 인스턴스에 들어있는 값이 같을 때(논리적으로 동일), equal() 메서드를 재정의해 논리적으로 같음을 출력하면사, hashCode() 메서드를 재정의해 두 값이 같은 해시 코드를 반환하도록 할 수 있음.

    - clone(): 객체를 복사하는 메서드

 

2) String 클래스: 프로그램 구현에 많이 활용되는 문자열을 사용할 수 있도록 제공하는 클래스.

* 클래스를 선언하는 방법

    1) 생성자의 매개변수로 문자열 생성: 새로운 객체를 생성해(new 예약어) 문자열을 위한 메모리가 따로 할당됨(아래 2)방법으로 선언된 객체의 메모리와 다른 주소를 가리킴).

    2) 문자열 상수를 가리키기: 기존 상수 풀(프로그램에서 사용하는 상숫값을 저장하는 공간)에 있던 문자열 상수의 주소를 가리킴.

* 한 번 생성되면 그 내부의 문자열은 변경되지 않음!

    - final char[ ]: String 클래스에서 제공하는 기본 배열, final 예약어로 선언(문자열은 불변immutable한다)

-> concat() 메서드로 두 개의 문자열을 연결하면, 두 문자열이 연결된 새로운 문자열 생성.

    - StringBuffer, StringBuilder 클래스: 내부에, 변경할 수 있는 char[ ] 변수가 있음, 기존의 char[ ] 배열을 확장해 추가 메모리를 사용하지 않고 문자열 연결 가능.

-> 여러 작업(스레드)에서 동시에 문자열을 변경할 때 안전성이 보장되는가(Buffer)? 보장되지 않는가(Builder)?

    - 문자열을 여러 줄 지원하는 텍스트 블록: 여러 줄의 문자열 또는 들여쓰기 한 문자열 생성 지원(""" ~ """)

* 실무나 프로젝트에서, HTML이나 JSON 형식의 문자열, SQL(데이터베이스 언어) 작성에 유용하게 사용할 수 있을 것.

 

3) enum: 상수를 하나의 객체처럼 활용하는 데 사용. 예) '초보자', '중수', '고수' 레벨 상수는 게임 레벨이라는 공통 역할을 가지지만 각각 다른 값을 가져야 함. 이때 각기 다른 상수를 '게임 레벨'이라는 하나의 객체처럼 활용하기 위해 enum 사용.

* 왜 enum을 사용할까? 서로 다른 상수임에도 값이 같아 추후 오류 찾기나 코드 읽기에 혼란을 야기하거나, 선언한 상수마다 다른 자료형의 값을 넣어야 하는 등 여러 개의 상수로 발생할 수 있는 문제를 예방하고자, 별도로 상수를 추가하지 않으면서 여러 상숫값을 구현하기 위함!

    - enum은 인스턴스로 만들 수 없음.

    (enum이 제공하는 메서드)

    - values(): enum에 선언한 모든 상수를 하나의 배열로 반환.

    - toString(): 상수가 아닌 다른 속성값 출력.

    - valueOf() : enum에 해당하는 상수가 있는지 확인하고, 해당 상수를 인스턴스로 반환.

 

4) record 클래스: 변하지 않는 데이터 객체 정의. private final로 선언해, 한 번 값이 정해지면 필드값이 변하지 않음.

* 가령 웹 프로그램에서,

클라이언트로부터 전달받은 값을 다른 객체에 전달하거나, 서버에서 만들어진 값을 클라이언트로 전달할 때,

해당 값은 전송 전후로 변하면 안 됨. -> 이때 record 클래스로 선언해 사용하는 것이 좋음!

 

5) Class 클래스: 클래스와 인터페이스 정보 관리

    - Class 클래스 선언하고 클래스 정보를 가져오는 방법: Object 클래스의 getClass() 메서드 사용, 클래스 파일 이름을 Class 변수에 직접 대입, Class.forName("클래스 이름") 메서드 사용.

* 위 세 가지 방법 중 첫 번째를 직접 사용해보며 약간의 해프닝도 있었다. 이에 대해서는 아래 참고.

(Do it! 자바, 4주차-3) getClass() 메서드 오류에 대해: non-static method getClass() cannot be referenced from a static context

 

(Do it! 자바, 4주차-3) getClass() 메서드 오류에 대해: non-static method getClass() cannot be referenced from a stati

사용한 학습 자료: 박은종, 2025, , 이지스퍼블리싱.https://ebook-product.kyobobook.co.kr/dig/epd/ebook/E000010942415 Do it! 자바 프로그래밍 입문 [개정판] | 박은종 저자eBook Do it! 자바 프로그래밍 입문 [개정판] |

gyeonkangkim.tistory.com

 

    - Class 클래스로 클래스 정보 확인하기

* 리플렉션 (프로그래밍): 사용하려는 클래스의 자료형을 모르는 상태에서 Class 클래스를 활용해 그 클래스의 정보를 가져오고, 이를 활용해 인스턴스를 생성하거나 메서드를 호출하는 방식.

    - newInstance() 메서드: 클래스 정보를 바탕으로 인스턴스를 생성.

    - Class.forName() 메서드: 동적 로딩(프로그램 실행 이후 클래스를 로딩하고자 할 때)

    예) 어떤 회사에서 개발한 시스템이 여러 종류의 DB를 지원할 때, 시스템 구동 시 어느 DB와 연결할 지 정하고 해당 드라이버만 로딩하면 됨. 이때 회사에서 사용하는 DB 정보는 환경 파일에서 읽어올 수도, 다른 변수의 값으로 받을 수도 있음.

    -> 이렇게 프로그램을 실행한 다음 클래스를 로딩하려고 할 때 동적 로딩 사용!

    * forName()은 원래 매개변수를 문자열로 입력받음. 여기서 입력받을 문자열을 변수로 선언하면, 변숫값을 바꾸는 것만으로 다른 클래스를 로딩할 수 있음. -> 필요에 따라 로딩되는 클래스를 동적으로 변경할 수 있음!

* 의존성 주입: 자바를 활용한 웹 프로그램 개발시, 사용할 객체를 직접 생성 혹은 관리하지 않고 외부에서 하도록 구현하는 것. 코드 구조를 보다 유연하게 만들 수 있음. 주로 스프링 등 프레임워크에서 많이 사용.

 

(11장 되새김 문제 풀이: 미완성)

(Do it! 자바, 4주차-1) 11장 되새김 문제 풀이(작성 중)

 

(Do it! 자바, 4주차-1) 11장 되새김 문제 풀이(작성 중)

사용한 학습 자료: 박은종, 2025, , 이지스퍼블리싱.https://ebook-product.kyobobook.co.kr/dig/epd/ebook/E000010942415 Do it! 자바 프로그래밍 입문 [개정판] | 박은종 저자eBook Do it! 자바 프로그래밍 입문 [개정판] |

gyeonkangkim.tistory.com

 

<12장: 컬렉션 프레임워크>

1) 제네릭 프로그래밍: 어떤 값이 하나가 아니라 여러 참조 자료형을 사용할 수 있도록 프로그래밍하는 것.

예) 3D 프린터로 만드는 입체 모형 재료가 달라져도 프린터 기능은 동일.

따라서 프린터(클래스)를 두 대 만들기보다는 재료 변수를 상위 재료 객체(Object 클래스 자료형)로 정의하는 것이 효율적.

단, 상위 Object형으로 변환한 어떤 재료는 사용하기 위해 다시 원래 재료 형태로 돌려놔야 할 때가 있음.

이때 매번 형 변환을 하지 않기 위해 제네릭 방식 사용!

 

2) 컬렉션 프레임워크

- 자료 구조: 프로그램을 개발할 때, 기능을 효과적으로 구현하기 위해 개발에 사용하는 자료를 메모리에 유지 및 관리하기 위해 사용 -> 연결 리스트, 스택, 큐, 배열 등 선형 구조와 트리, 그래프 등 비선형 구조, 순차 파일 등 파일 구조

- 컬렉션 프레임워크: 자바에서, java.util 패키지에 미리 구현, 제공되는 클래스나 인터페이스 집합 -> 필요한 자료 구조가 구현되어 있는 일종의 키트.

    (주요 인터페이스)

    - Collection 인터페이스(423쪽)

분류 설명
List 인터페이스 - 순서 있는(순차) 자료 관리할 때 사용.
- 중복 허용.
- ArrayList, Vector(이상 배열), LinkedList, Stack, Queue 등
Set 인터페이스 - 특별한 순서 없는 자료 관리에 사용 -> 주로 집합과 같은 자료 구조
- 중복 허용하지 않음.
- HashSet, TreeSet

 

    - Map 인터페이스(424쪽): 쌍으로 구성된 자료 관리(key-value 쌍), 검색용 자료 구조

-> 뭔가 JSON이 떠오르는 구조(속성-값 쌍)

JSON (참고: JSON 개요, 260129 최종접속)

    (예시)

key value
이름 뷔구룽
나이 25세
직업 IT 개발자
취미 애니메이션 감상, 정보검색
특기 작문

 

(12장 되새김 문제 풀이: 미완성)

(Do it! 자바, 4주차-4) 12장 되새김 문제 풀이(작성 중)

 

(Do it! 자바, 4주차-4) 12장 되새김 문제 풀이(작성 중)

사용한 학습 자료: 박은종, 2025, , 이지스퍼블리싱.https://ebook-product.kyobobook.co.kr/dig/epd/ebook/E000010942415 Do it! 자바 프로그래밍 입문 [개정판] | 박은종 저자eBook Do it! 자바 프로그래밍 입문 [개정판] |

gyeonkangkim.tistory.com

 

새롭게 배운 점

1) 코더나 프로그래머가 모든 코드를 직접 구현하지 않아도, 필요한 주요 코드나 메서드가 들어있는 기본 클래스가 있다는 게 앞으로 코딩을 함에 있어서 도움이 많이 되겠구나 생각한다.

가령 두 객체의 값이 같은지 여부를 처리해 결과로 출력하는 기능이 필요하다고 하자.

만약 기본 클래스가 없었다면 해당 기능을 하나하나 손과 머리로 직접 짜내야 했을 것이다.

하지만 클래스에 이미 준비된 메서드를 그대로 활용하거나 필요에 따라 재정의해 씀으로 코드 구현에서 수고를 많이 덜 수 있겠다.

자바 기초를 떼고 앞으로 코딩 공부를 이어간다면 아마도 라이브러리나 프레임워크 같은 도구 사용을 배워나갈 것이다.

이들을 통해 코딩과 프로그래밍에 대한 벽을 조금씩 허물어갈 수 있다는 기대가 생겨 공부에 재미가 붙는 느낌이다!

 

2) 길게 적을 필요 없이, 아직 컴퓨터와 프로그래밍에 대한 기초가 부족함을 뼈저리게 배운다.

아직까지는 자바로 간단한 프로그램을 혼자 짜지도 못하는 데다, 컴퓨터가 이해할 수 있게 (논리적으로) 생각하고 프로그램을 구현하는 능력이 내게는 없다.

앞으로 프로그래밍 공부에 흥미를 잃지 않으면서도 기본기를 쌓아가려면 어떻게 해야 할까?

어려웠던 점

1) JDK 기본 클래스 부분으로 넘어가면서 점점 예제의 코드 길이가 길어짐이 느껴진다(특히 record 클래스 부분, 뭐 이리 재정의한다는 메서드가 많은지...)

거기에 책 중반에 접어드니 예제의 부연설명도 갈 수록 줄어드는 것 같다. 앞부분을 이미 다 알고 왔다는 전제이려나.

물론 코드를 직접 타이핑하다보면 이전에 공부했던 기억이 어느 정도는 되살아나지만,

equals() 메서드 같이 아직까지도 코드의 원리가 복잡하게 느껴지는 부분도 있어 쉽지는 않다.

 

초보자로서 사견을 적자면,

이 책 분량이나 구성 자체가 첫 코딩이나 언어 공부에 재미를 붙이기에는 적절하지 않을 것 같다. 분량도 너무 많고 지나치게 개념 설명에 쏠린 게 아쉽달까. 책 자체가 나쁘다는 건 아니지만, 초보자를 위한 입문서라기보다는 컴퓨터공학과 저학년 전공서적 느낌이 더 강한 것 같다.

나 같은 초보자들에게 하나라도 더 알려주려는 저자 분의 노고는 충분히 느껴지지만, 코딩에 쉽게 흥미를 붙이기에는 너무 방대한 양의 개념을 들고 오신 것 같다. 개념이 쌓여있으면 아무래도 코딩 실습에 흥미가 생기기는커녕 많은 개념을 전부 머리에 넣어야한다는 강박이 더 많이 들 거라 생각한다(적어도 나는 그렇다).

차라리 생활코딩이나 흥달쌤 같은 분들의 기초 유튜브 강의나 <점프 투 자바> 같이 개념을 간결하게 설명하는 책으로 빠르게 핵심 개념 위주로 이해한 다음 간단하게라도 직접 프로그램을 만들어보는 게 코딩에 장기적으로 흥미 붙이기에는 더 좋지 않을까... 아니면 여유가 있다면 유데미 같은 사이트에서 프로젝트 강의를 들으며 직접 프로젝트를 해 보거나.

-> (260130 추가) 사실 이 부분은 생각해 보니 마냥 책이 어렵기만 한 건 아닌 듯하다.

일단 내 자신이 아직 자바의 기본 원리를 잘 이해하지 못하고 있거나, 프로그래밍의 기초와 친해지지 못한 탓도 크지 않을까. 프로젝트를 해 보는 것도 일단 어느 정도 자바의 기초를 이해하는 게 우선이 되어야 하니.

어쩌면 자바를 받아들이기에 아직 내 역량이 부족할 지도 모르겠다. 우선 시작한 스터디는 끝까지 최선을 다해 완수하되...

 

남은 스터디 기간 그리고 스터디가 끝난 뒤에서 끊임없이 고민해봐야 할 과제를 다음과 같이 정리할 수 있겠다.
1) 내가 왜 자바(혹은 프로그래밍) 공부를 시작했는지
2) 프로그래밍을 통해 무슨 목표를 이루려고 하는지
3) 만약 반드시 자바를 우선시하지 않아도 된다면, 어떻게 프로그래밍과 친해질 수 있을지(공부 방향성 재점검과 수정 등)
시작 단계에 자바가 꼭 필요하다면, 어떻게 자바에 익숙해지고 스스로 간단한 프로그램을 만들어볼 수 있을지

 

실습 코드(깃허브)

https://github.com/KimGyeonkang/DoitJava_Studying_2026

 

GitHub - KimGyeonkang/DoitJava_Studying_2026

Contribute to KimGyeonkang/DoitJava_Studying_2026 development by creating an account on GitHub.

github.com