Java 공식 문서: 개념, 예제, 실습
예제 중심의 간결한 Java 레퍼런스. 개념을 읽고 코드를 본 뒤 Coddy 여정에서 직접 연습하세요.
Java 가이드 학습 시작하기시작하기
- 자바란자바가 실제로 무엇인지, JVM이 어떻게 하나의 컴파일된 프로그램을 어디서나 실행되게 하는지, 그리고 자바로 어떤 소프트웨어를 만드는지 알아봅니다.
- Java 설치하기Java Development Kit(JDK) 설치 방법, 버전과 공급사 선택, 그리고 java와 javac이 명령줄에서 작동하는지 확인하는 방법.
- Java 실행하기모든 Java 프로그램 뒤에 있는 컴파일 후 실행이라는 두 단계 사이클. javac로 .java 소스를 바이트코드로 바꾼 다음, java로 .class 파일을 실행합니다.
- 자바 문법자바 프로그램의 형태 - `main` 메서드, 문장과 세미콜론, 블록과 중괄호, 그리고 코드가 실행되기도 전에 컴파일러가 강제하는 규칙들.
- 주석Java에서 주석을 작성하는 방법을 알아봅니다. 한 줄 // 주석, 여러 줄 /* */ 블록, Javadoc /** */ 문서 주석과 함께 각각을 언제 사용하고 무엇을 피해야 하는지 설명합니다.
변수와 타입
- 변수자바에서 변수가 동작하는 방식 — 타입을 지정한 선언, 값 할당, 이름 규칙, var 키워드, final로 만드는 상수, 그리고 변수가 어디에 존재하는지를 결정하는 스코프 규칙.
- 데이터 타입자바의 데이터 타입을 쉽게 설명합니다 - 8가지 기본형, 참조형, 기본값, 리터럴과 접미사, 오버플로, 그리고 어떤 숫자 타입을 언제 써야 하는지.
- 문자열자바 문자열이 동작하는 방식: 생성하기, +로 합치기, 왜 불변(immutable)인지, equals로 비교하기, 그리고 length, substring, replace 같은 일상적인 String 메서드.
- 문자열 포맷Java에서 String.format과 printf로 문자열을 포맷하는 방법 - 숫자, 패딩, 소수점을 위한 형식 지정자, 그리고 텍스트 블록과 formatted 메서드.
- 연산자자바 연산자의 작동 방식 - 산술, 비교, 논리, 대입, 증감, 삼항 연산자 - 그리고 정수 나눗셈, 우선순위, 초보자가 흔히 빠지는 함정까지 다룹니다.
- 형변환자바가 타입 간에 변환하는 방식 - 자동 확대 변환, 명시적 축소 캐스팅, 축소할 때 잃게 되는 데이터, 그리고 숫자와 문자열 간의 변환.
제어 흐름
- if-elseif, else if, else로 Java에서 판단을 내리는 방법: boolean 조건, 분기 연결, 중첩, 삼항 연산자, 그리고 많은 사람을 헷갈리게 하는 흔한 실수까지 다룹니다.
- switchJava switch 문 설명: case 레이블, break와 폴스루, default 분기, case 그룹화, 최신 화살표 형식, 그리고 switch 표현식.
- for 루프자바 for 루프 설명: 고전적인 3부 구성 루프, 배열과 리스트 순회, 중첩 루프, break와 continue, 그리고 향상된 for-each.
- while 반복문자바 while 반복문 설명 - 조건을 먼저 검사하는 while, 최소 한 번은 실행되는 do-while, 센티넬 값까지 입력 읽기, break와 continue, 그리고 무한 루프 피하기.
- for-each 반복문자바 for-each(향상된 for) 반복문 설명: 배열과 컬렉션을 깔끔하게 순회하는 방법, 언제 써야 하는지, 그리고 누구나 걸려 넘어지는 수정 함정.
배열과 컬렉션
- 배열자바에서 배열이 어떻게 동작하는지 - 고정 길이, 선언과 초기화, 인덱싱, length, 반복, 다차원 배열, 그리고 Arrays 유틸리티 클래스.
- ArrayList일반 배열 대신 사용하는 크기 가변 리스트, 자바 ArrayList 사용법 - 추가, 가져오기, 삭제, 크기, 반복, 정렬까지 다룹니다.
- HashMap키-값 조회에 Java의 HashMap을 사용하는 방법: put, get, getOrDefault, containsKey, 엔트리 순회, 그리고 가장 자주 사용하게 되는 패턴들.
- HashSet중복 없는 값의 컬렉션을 다루는 Java HashSet 사용법 - add, contains, remove, 리스트 중복 제거, 그리고 합집합·교집합·차집합으로 집합 결합하기.
- 컬렉션 순회자바 컬렉션을 반복하는 방법들 - for-each 루프, Iterator, 인덱스 루프, forEach 메서드 - 과 순회하면서 요소를 안전하게 제거하는 방법.
메서드
- 메서드자바 메서드란 무엇인지, 선언하고 호출하는 방법, 반환값과 void의 차이, 정적 main 메서드, 그리고 메서드가 코드를 어떻게 정돈되고 재사용 가능하게 유지하는지 다룹니다.
- 메서드 매개변수자바 메서드 매개변수가 동작하는 방식 - 인수 전달, 매개변수와 인수의 차이, 자바의 값에 의한 전달 규칙, 그리고 값 반환.
- 메서드 오버로딩자바 메서드 오버로딩이 어떻게 여러 메서드가 같은 이름을 공유하면서 다른 매개변수를 받게 하는지, 컴파일러가 어떤 오버로드를 선택하는지, 그리고 피해야 할 모호성 함정을 알아봅니다.
- 가변 인자Java의 가변 인자(...)가 메서드로 하여금 임의 개수의 인자를 받게 하는 방법, 그것이 배열이 되는 원리, 가변 인자는 마지막에 하나만이라는 규칙, 그리고 빈 호출과 모호성의 함정.
클래스와 객체
- 클래스자바 클래스란 무엇인지, 필드와 메서드를 정의하는 방법, new로 객체를 생성하는 법, this의 역할, 그리고 인스턴스 상태가 객체에 저장되는 이유를 알아봅니다.
- 생성자자바 생성자의 작동 방식: 기본 생성자, 매개변수 있는 생성자, this, 생성자 오버로딩, 그리고 this()와 super()를 이용한 연쇄 호출.
- 상속자바 서브클래스가 extends로 필드와 메서드를 상속하고, super로 부모를 호출하며, 동작을 오버라이딩하는 방법과 흔히 빠지는 함정을 알아봅니다.
- 인터페이스자바 인터페이스란 무엇인지, 어떻게 정의하고 구현하는지, default 메서드와 static 메서드, 그리고 인터페이스가 추상 클래스와 어떻게 다른지 살펴봅니다.
- 추상 클래스자바 추상 클래스란 무엇인지, 추상 메서드를 선언하는 방법, 왜 인스턴스화할 수 없는지, 그리고 인터페이스 대신 추상 클래스를 선택해야 할 때를 설명합니다.
- 다형성자바의 다형성이 하나의 변수로 여러 타입을 참조하게 하는 원리, 오버라이드된 메서드가 런타임에 디스패치되는 이유, 그리고 업캐스팅·다운캐스팅·instanceof를 안전하게 사용하는 방법을 설명합니다.
- 접근 제어자자바의 네 가지 접근 수준 - public, private, protected, package-private - 이 다른 코드가 무엇을 보고 건드릴 수 있는지 어떻게 제어하는지 살펴봅니다.
- 정적 멤버Java에서 static 키워드가 하는 일, static 필드와 메서드가 객체가 아니라 클래스에 속하는 방식, 그리고 static 블록과 상수를 언제 사용해야 하는지 알아봅니다.
- 열거형자바 enum이 무엇인지, 어떻게 선언하는지, 필드와 메서드를 추가하는 법, switch에서 분기하는 법, 그리고 enum이 잔뜩 쌓인 int나 String 상수보다 나은 이유를 알아봅니다.
제네릭과 함수형
- 제네릭자바 제네릭이란 무엇인지, 제네릭 클래스와 메서드를 작성하는 방법, 한정된 타입 매개변수, 와일드카드, 그리고 타입 소거가 왜 중요한지 설명합니다.
- 람다 표현식자바 람다 표현식이 무엇인지, 화살표 문법, 함수형 인터페이스를 어떻게 구현하는지, 메서드 참조, 그리고 변수 캡처에 대해 다룹니다.
- 스트림자바의 Stream API로 컬렉션을 처리하는 방법 - filter, map, sorted, collect, count, reduce - 수동 반복문 대신 읽기 좋은 파이프라인을 만들기.
- Optionaljava.util.Optional이 무엇인지, 어떻게 만드는지, 그리고 null 검사 대신 map, filter, orElse, ifPresent로 값을 안전하게 읽는 방법.