[스파르타코딩클럽]/Java 문법 종합반 13

Chapter 13. 모던 자바(람다, 스트림, Optional)

함수형 프로그래밍 순수 함수: 수학의 함수처럼 특정한 데이터에 의존하지 않고, 관련없는 데이터를 변경하지도 않으며, 결과값이 오직 입력값에만 영향을 받는 함수 효용 검증이 쉽다 성능 최적화가 쉽다 동시성 문제를 해결하기 쉽다 모던 자바 : 자바 8 변경점 함수형 프로그래밍 아이디어 1: 함수를 일급 값(일급 객체)으로 일급 객체 특징 함수에 인자로 넘길 수 있다. 함수의 결과로 반환할 수 있다. 값을 수정할 수 있다. 값을 변수에 대입할 수 있다. 결론: 메서드 참조 기능 도입 함수형 프로그래밍 아이디어 2: 람다(익명함수) 익명함수란 이름이 없는 함수를 뜻하며 일급 객체로 취급됨 함수를 값으로 사용할 수 있으며 파라미터에 전달 가능 연산 가능 스트림 데이터 처리연산을 지원하도록 소스에서 추출된 연속된 ..

Chapter 12. 스레드

프로세스: 운영체제로부터 자원을 할당받는 작업의 단위. "실행 중인 프로그램" OS가 프로세스를 할당할 때 프로그램 Code와 Data, 메모리 영역(Stack, Heap)을 함께 할당 프로세스 구조 Data: 프로그램이 실행 중 초기화된 데이터를 저장하는 공간(전역 변수, static 변수, 상수) Stack: 지역 변수, 매개변수 리턴 변수를 저장하는 공간 Heap: 동적으로 필요한 변수를 저장하는 공간 스레드: 프로세스가 할당받은 자원을 이용하는 실행의 단위 프로세스가 작업 중인 프로그램에서 실행 요청이 들어오면 스레드를 만들어 명령 처리 스레드는 프로세스 내 메모리공간(Heap)을 공유받음 스레드는 자신만의 메모리공간(Stack)도 할당받음 Java 스레드: JVM 프로세스 안에서 실행되는 스레드..

Chapter 11. 제네릭(Generic)

제네릭의 효용 중복되거나 필요없는 코드를 줄여줌 그러면서도 타입 안정성을 해치지 않음 자바에서는 똑같은 로직을 수행하는 함수를 타입을 지정해야 한다는 이유로 여러번 구현해야 함 -> Object를 사용? 이 경우 타입 안정성을 침해받게 됨 -> 단항 연산자를 사용 x. 두 객체의 타입이 다르다면? 로직과 다른 순서의 타입들이 들어오게 된다면? 등등 제네릭 문법 예시로 살펴보기 // 1. 2. public class Generic { // 3. private T t; public T get() { return this.t; } public void set(T t) { this.t = t; } public static void main(String[] args) { // 4. Generic stringGen..

Chapter 10. 예외처리

오류(Error): 일반적으로 회복이 불가능한 문제 시스템 레벨에서, 또는 주로 환경적인 이유로 발생 에러가 발생한 경우 어떠한 에러로 프로그램이 종료되었는지 확인하고 대응 예외(Exception): 일반적으로 회복이 가능한 문제 코드레벨에서 할 수 있는 문제상황에 대한 대응은 "예외처리"에 속함 예외의 종류 코드실행 관점에서 컴파일: 프로그래밍 언어로 작성한 코드를 컴퓨터가 이해할 수 있는 언어로 변환하는 것(.java -> .class) 컴파일 에러: 언어의 규칙을 지키지 않아서 발생. 문법에 맞게 다시 작성 런타임 에러: 컴파일은 잘 되었지만 프로그램 실행 도중 발생 예외처리 관점에서 확인된 예외(Checked Exception): 컴파일 시점에 확인하는 예외. 반드시 예외 처리를 해야함. 미확인된..

Chapter 9. 인터페이스

인터페이스의 역할: 상속 관계가 없는 다른 클래스들이 메서드를 구현해야 할 때 인터페이스는 구현 클래스들의 동일한 사용 방법과 행위를 보장해줄 수 있음 인터페이스 선언: public, default 접근 제어자 지정 가능 public interface 인터페이스명 { } 인터페이스 구성 모든 멤버변수는 public static final이어야 하며, 생략 가능 모든 메서드는 public abstract이어야 하며, 생략 가능 생략된 제어자는 컴파일러가 자동으로 추가 public interface 인터페이스명 { public static final char A = 'A'; static char B = 'B'; final char C = 'C'; char D = 'D'; void turnOn(); // pu..

Chapter 8. 상속

클래스 간의 관계와 상속 부모 클래스의 필드와 메서드를 자식 클래스에게 물려줌 코드의 중복 제거, 재사용성 증가로 생산성과 유지보수성에 유리해짐 상속 public class 자식클래스 extends 부모클래스 { } 클래스간의 관계 상속관계: is - a ("~은 ~이다.") 포함관계: has - a ("~은 ~을 가지고 있다.") Java는 다중상속을 허용하지 않음 final 클래스: final class 클래스명으로 선언 더 이상 상속할 수 없음 final 메서드: final 반환타입 메서드명()으로 선언 더 이상 오버라이딩 할 수 없음 Object 클래스: Java 내 모든 클래스들의 최상위 부모 클래스 모든 클래스는 Object의 메서드를 사용할 수 있음 부모 클래스가 없는 자식 클래스는 컴파일러..

Chapter 7. 클래스

객체지향 프로그래밍 객체: 세상에 존재하는 물체. 식별이 가능한 것. 객체: 속성(필드) + 행위(메서드) 객체 모델링: 현실 세계에 있는 객체를 소프트웨어의 객체로 설계하는 것 객체 간 상호작용: 메서드를 통해 이루어짐 객체 간 관계 사용 관계 포함 관계 상속 관계 객체지향 프로그래밍의 특징 캡슐화: 필드와 메서드를 하나로 묶어 객체로 만든 후 실제 내부 구현은 외부에서 알 수 없게 감추는 것 캡슐화된 객체의 필드와 메서드를 노출 시킬 지 감출 지 결정하기 위해 접근 제어자 사용 상속: 부모 객체의 필드와 메서드를 자식 객체에 물려주는 것 객체들을 상속 관계로 묶음으로써 객체 간의 구조를 파악하기 쉬워짐 부모 객체의 필드와 메서드를 수정하면 자식 객체에 모두 반영되어 일관성을 유지하기 좋음 코드의 중복..

Chapter 6. 컬렉션

컬렉션: 다수의 참조형 데이터를 배열보다 더 쉽고 효과적으로 처리할 수 있는 기능을 많이 가지고 있음 컬렉션 종류 Collection - List, Set, Queue, Map List: 순서가 있는 데이터의 집합 (데이터 중복 허용) Queue Set: 순서가 없는 데이터의 집합 (데이터 중복 허용 안함) Map: 순서가 없는 (Key, Value) 쌍으로 이루어진 데이터의 집합 (Key 값 중복 허용 안함) List: 순서, 중복 있음 ArrayList: 배열처럼 일렬로 데이터를 저장하고 조회하여 인덱스로 값을 하나씩 조회 가능 배열과 달리 크기가 정해져 있지 않음 (동적 배열) 기능 선언: ArrayList 리스트명 생성: new ArrayList(); 초기화 필요 없음 값 추가: 리스트명.add(..

Chapter 5. 배열

선언 방법 타입[] 변수; 타입 변수[]; 생성: new 명령어를 통해 []안에 크기를 지정 배열이 생성될 때 각 타입별 초기값으로 초기화됨 int는 0, boolean은 false, String은 null 배열은 참조형 변수이므로 실제 값을 담지 않고 실제값의 주소값을 저장 초기화 방법 중괄호 {} 이용 반복문 for문을 사용해 초기화 Arrays.fill 메소드를 사용 Arrays.fill(배열 변수, 초기화값); // 모두 같은 값으로 일괄 초기화 복사 얕은 복사: 대입 연산자 =을 사용해서 복사하면 주소값만 복사됨 깊은 복사: 새로운 배열을 똑같이 만들고자 할 때 for문을 통해 배열의 기본형 값을 꺼내서 복사 메서드 이용 int[] b = a.clone(); // 2차원 이상의 배열에서는 얕은 ..

Chapter 4. 조건문, 반복문

조건문 if(조건) {연산}: 조건이 true를 만족하면 연산 수행 if(조건)-else if(조건)-else if(조건) 중첩 if문 switch(피연산자) { case(조건): (연산) } 여러 개의 case문 설정 가능 break;로 case의 연산문이 끝났다는 것을 알림 제일 마지막에 default: (연산)을 명시하여 조건을 모두 만족하지 않을 때 수행할 연산을 정함. 생략 가능 if문과 달리 피연산자 한 개에 대한 조건만 지원 조건식 결과의 제약 조건: 정수, 문자열, 상수(문자 포함)만 가능 두 값을 비교하는 메서드: Objects.equals(좌, 우) - true/false 반환 반복문 for문 for(초기값; 조건문; 증감연산) {연산} 향상된 for문 for(변수 타입 변수명 : 배열..