전체 글 36

[02] SRP와 OCP, 그리고 map과 flatMap

01. SOLID 원칙 | SRP vs OCP1. 단일 책임 원칙 (Simple Responsibility Principle, SRP)단일 책임 원칙이란 하나의 클래스는 반드시 하나의 책임만을 가져야 한다는 객체 지향 설계 원칙이다. 책임이란 클래스가 맡은 역할을 의미하며, 이러한 역할은 동시에 클래스를 수정하는 변경의 이유가 된다. 즉, 클래스가 맡는 책임(역할)이 늘어날수록 클래스를 변경해야 할 이유가 늘어나는 것이다. 따라서 개발자는 하나의 클래스에 하나의 책임을 부여함으로써, 클래스의 변경 이유를 하나로 고정해야 한다. class Report { String title; String content; void saveToFile() {} // 책임 1: 파일 저장 void p..

[01] 객체 지향 프로그래밍

01. 객체 지향1. 객체(Object)프로그래밍 세계에서의 객체란 현실 세계에서 인지 가능한 모든 대상을 의미한다. 무생물 뿐만 아니라 사람, 동물, 개념이나 사상까지 표현할 수 있으며, 객체란 결국 특징(State)과 행위(Behavior)를 가진 독립적인 단위라고 볼 수 있다. 객체 지향 프로그래밍에서는 이러한 작은 객체들을 조합하여 하나의 프로그램을 완성한다. 2. 객체 지향 프로그래밍(Object-Oriented Programming, OOP)객체 지향 프로그래밍은 "현실 세계는 수많은 객체로 이루어져 있으며, 객체 간 상호작용을 통해 사건이 발생한다"는 철학을 기반으로, 프로그래밍에 필요한 정보를 한 곳에 모아 상태와 행동을 가지는 객체를 만들고 이 객체들의 상호 협력을 통해 하나의 프로그램을..

[03] 배열

01. 배열배열이란 동일한 타입의 값들을 하나의 묶음으로 묶은 자료 구조를 의미한다. 즉, 배열이란 같은 의미를 지니면서 서로 연관성이 있는 값들의 모임이라고 할 수 있다. 이러한 값 하나를 요소(element)라고 하는데, 배열은 요소를 연속한 메모리에 순차적으로 저장하고, 각 요소에 인덱스(index)를 부여함으로써 접근성을 높인다. double[] temperatureOfJuly = {1, 2, ... , 31}; 02. 배열의 차원차원이란 배열이 중첩된 정도로, 1차원 배열이나 2차원 배열이 주로 사용된다. 즉, 2차원 배열이란 배열의 요소가 또 다른 배열인 경우를 의미한다. 1. 1차원 배열1차원 배열은 가장 일반적인 배열의 형태로, 배열의 요소가 배열이 아닌 배열을 의미한다. 1차원 배열..

[02] 문자열과 제어문

01. 문자열 (String)1. String 객체의 불변성문자열이란 기본적으로 큰따옴표("")로 감싸진 데이터로, 연산이 수행될 때마다 내부적으로 주소값이 변화하는 불변 객체이다. 이는 문자열이 기본 타입 변수가 아닌, 참조 타입 변수이기 때문이다. 즉, String 타입은 실제 문자열의 내용을 값으로 가지는 것이 아니라 문자열이 존재하는 공간 상의 주소값을 저장한다. // 문자열 리터럴을 String 타입의 변수 name에 할당String name1 = "Kim Coding";// String 클래스의 인스턴스 생성String name2 = new String("Kim Coding");// 불변성 객체 예제// (1) 문자열 리터럴을 직접 할당 = 같은 문자열의 공간을 참조String name1 = ..

[01] Java와 변수

01. JAVAJAVA란 플랫폼 독립성, 객체 지향, 안정성을 강점으로 하는 프로그래밍 언어다. 전 세계적으로 백엔드, 모바일(Android), 임베디드, 금융 시스템 등 다양한 영역에서 널리 사용된다. JAVA는 여러 버전이 존재하며, 버전에 따라서 성능과 문법 차이가 있다. 실무에서는 Java 17 이상을 사용하는 경우가 많다. JAVA의 특징 Write Once, Run Anywhrere자바 가상 머신(JVM) 위에서 실행되므로 운영체제에 상관없이 작동>> JRE(자바 가상 머신 + 표준 클래스 라이브러리) 설치되어 있는 모든 운영체제에서 실행 가능객체 지향 언어(OOP)클래스를 기반으로 설계하여, 확장성이 좋고 유지보수에 용이함자동 메모리 관리 (GC)개발자가 직접 메모리를 해제하지 않아도 됨>>..

[05] Stream 추가 연산

01. Optional ClassOptional는 Java 8에서 도입된, null 안정성을 위한 래퍼 클래스이다. 그렇기에 Optional를 사용하면 NullPointerException(NPE)를 방지하기 위해 null 값을 if 문을 통해 처리했던 과거와 달리, 객체 차원에서 NPE를 방지할 수 있다. 즉, Optional은 값이 존재할 수도 있고, 존재하지 않을 수도 있는 컨테이너이다. 1. 기본 구조public final class Optional { private final T value;} 2. 객체 생성 방법// 1. of()와 ofNullable()을 통한 객체 생성Optional opt1 = Optional.ofNullable(null); // null도 허용Optional..

[04] Stream API의 기본 연산

01. 스트림의 중간 연산1. 중간 연산 (Intermediate Operation)스트림의 중간 연산이란 스트림 생성 이후에 수행되는 연산으로, 연산 결과로 스트림을 반환하기 때문에 여러 개의 연산자를 연결하여 우리가 원하는 데이처 처리를 수행할 수 있다. 즉, 중간 연산은 데이터를 우리가 원하는 형태로 처리 및 가공하는 역할을 수행한다. 2. 주요 중간 연산자 종류주요 중간 연산자메서드 매개 값필터링filter()조건에 맞는 데이터들만을 정제하여 더 작은 컬렉션을 생성조건 (람다식을 통해 정의)매핑map()원하는 필드만 추출하거나 특정 형태로 변환조건 (람다식을 통해 정의)중복 제거distinct()스트림 내 중복 요소를 제거X정렬sorted()스트림 요소를 정렬>> 기본 정렬 또는 사용자 정의 ..