LANGUAGE
Java
엄격한 타입 체계와 객체지향 설계를 통해 대규모 시스템을 구조적으로 사고하는 힘을 기르는 언어입니다. 클래스와 인터페이스로 역할을 분리하고 JVM 위에서 코드가 어떻게 실행되는지 이해하는 훈련을 통해, 크고 복잡한 시스템도 흔들림 없이 설계할 수 있는 기초 체력을 기릅니다.
전체 12건
1. 출력(Output)
println·print·printf 세 가지 출력 방법의 차이와, 표준 출력과 표준 에러를 나눠 쓰는 습관을 익힙니다
println은 줄바꿈을 붙이고 print는 붙이지 않으며, printf는 C와 같은 서식 지정자를 쓴다는 차이를 나란히 비교합니다. System.out과 System.err이 서로 다른 스트림이라 출력 순서가 뒤섞일 수 있다는 점, 문자열을 미리 조립해 두는 String.format, 그리고 긴 문자열을 + 로 이어 붙일 때 생기는 비용까지 첫 주에 짚습니다.
2. 변수와 자료형, 강타입 시스템
기본형과 참조형의 차이, 컴파일 시점에 타입을 검사하는 강타입 언어의 특징을 직접 확인합니다
int·double 같은 기본형(primitive)과 객체를 가리키는 참조형(reference)이 메모리에서 다르게 취급되는 원리를 다룹니다. 컴파일 타임에 타입 오류를 잡아주는 강타입 시스템이 왜 대규모 프로젝트에서 유리한지 실제 오류 메시지로 체감합니다.
3. 클래스와 객체, 캡슐화
클래스를 설계도로, 객체를 실제 인스턴스로 이해하고 접근 제어자로 데이터를 캡슐화하는 법을 익힙니다
필드와 메서드를 하나의 클래스로 묶고, private/public 접근 제어자로 내부 상태를 보호하는 캡슐화 원칙을 실습합니다. getter/setter 패턴과 생성자를 활용해 안전한 객체를 설계하는 연습을 합니다.
4. 상속과 다형성
부모-자식 클래스 관계로 코드를 재사용하고, 다형성으로 유연한 구조를 설계하는 법을 다룹니다
extends로 클래스를 확장하고 메서드를 오버라이딩하는 패턴을 실습하며, 같은 메서드 호출이 실제 객체 타입에 따라 다르게 동작하는 다형성의 원리를 이해합니다. super 키워드와 생성자 체이닝도 함께 다룹니다.
5. 인터페이스와 추상 클래스
구현 없는 규약(인터페이스)과 부분 구현이 가능한 추상 클래스의 차이와 사용 시점을 익힙니다
인터페이스로 '무엇을 할 수 있는가'를 정의하고 여러 인터페이스를 동시에 구현하는 다중 상속 효과를 실습합니다. 추상 클래스와의 차이, 그리고 실무에서 어떤 상황에 어떤 것을 선택해야 하는지 기준을 세웁니다.
6. 컬렉션 프레임워크 (List / Map / Set)
List, Map, Set의 내부 구조와 성능 특성을 비교하며 상황에 맞는 컬렉션을 선택하는 기준을 세웁니다
ArrayList와 LinkedList의 삽입·조회 성능 차이, HashMap의 해시 충돌 처리 방식, Set이 중복을 제거하는 원리를 코드로 직접 확인합니다. 실전 문제를 컬렉션 선택 관점에서 접근하는 연습을 합니다.
7. 예외 처리와 자원 관리
try-catch-finally 구조와 체크/언체크 예외의 차이, try-with-resources로 자원을 안전하게 관리하는 법을 다룹니다
예외 계층 구조(Exception vs RuntimeException)를 이해하고 상황에 맞는 예외 처리 전략을 세웁니다. 파일이나 네트워크 자원을 열고 반드시 닫아야 하는 상황에서 try-with-resources가 왜 안전한지 직접 재현합니다.
8. 제네릭과 타입 안정성
제네릭으로 컴파일 타임에 타입을 강제해 런타임 형변환 오류를 방지하는 원리를 익힙니다
List
9. 멀티스레딩과 동시성 기초
Thread와 Runnable로 동시 실행을 구현하고, 공유 자원 접근 시 발생하는 동시성 문제를 다룹니다
여러 스레드가 동시에 실행되는 원리와 synchronized 키워드로 임계 구역을 보호하는 방법을 실습합니다. 경쟁 상태(race condition)를 직접 재현해보고 왜 동시성 제어가 필요한지 체감합니다.
10. Stream API와 함수형 스타일
컬렉션을 함수형 스타일로 처리하는 Stream API의 필터·맵·리듀스 패턴을 실전 코드로 익힙니다
for문 기반 로직을 filter/map/reduce 체인으로 재작성하며 선언형 코드 스타일을 익힙니다. 람다 표현식과 메서드 참조를 함께 다루며 함수형 프로그래밍의 기본 사고방식을 체득합니다.
11. Spring 기초
Controller-Service-Repository 계층 구조와 의존성 주입(DI)의 개념을 Spring으로 직접 구성합니다
Spring의 IoC 컨테이너가 객체 생성과 의존성을 관리하는 원리를 이해하고, @Controller/@Service/@Repository로 계층을 분리하는 실전 설계를 연습합니다. 왜 계층을 나누는지, 결합도를 낮추면 무엇이 좋아지는지 다룹니다.
12. 미니 프로젝트
지금까지 배운 객체지향과 Spring 기초를 총동원해 실제 동작하는 주문 처리 시스템을 직접 구현합니다
상품·주문·결제 도메인을 클래스로 설계하고 Spring 계층 구조 위에 API로 연결하는 미니 프로젝트를 진행합니다. 코드 리뷰를 통해 실무에서 통하는 설계 감각에 대한 피드백을 받습니다.