객체지향 프로그래밍객체지향 프로그래밍 : 캡슐화(Capsulation), 추상화(Abstract), 상속(Inheritance), 다형성(polymorphism) 등으로 복잡한 설계 사상을 구현할 수 있으며, 구현(Implementation)과 구성(Composition) 등을 활용해 설계 원칙과 디자인 패턴 구현에 사용된다.설계원칙코드 설계의 품질을 높이는 몇 가지 경험의 요약이며, 코드 설계에서 고려해야 할 일반적인 원칙에 해당한다. 또한 디자인 패턴보다 더 추상적이다.단일 책임 원칙(Single Responsibility Principle) : 모듈, 클래스, 메서드는 하나의 책임 또는 기능만을 가지고 있어야 한다.거대하고 포괄적인클래스를 설계하는 대신, 작은 단위와 단일 기능을 가진 클래스를 설계..
소프트웨어 아키텍처란?소프트웨어 아키텍처는 쉽게 말하면,**'소프트웨어를 만드는 설계도이자 구조'**입니다.비유를 들어볼게요.건물을 지을 때 만드려는 집의 모양을 그리고, 기둥을 세우고, 벽돌을 쌓는 방식으로는 작은 집은 만들 수 있습니다.그렇지만, 복잡한 건물이나, 고층 건물은 이렇게 단순한 지식만으로 만들 수 없죠. 고층 건물을 만들려면 건물의 구조 설계, 공간 설계(업무 공간, 생활 공간, 휴식/편의/문화 공간, 주차 공간, 관리 공간 등), 유동량에 따른 도로 설계, 전기/수도 등 설비, 각 설계에 맞는 적합한 자재 선정, 건물을 가장 효율적으로 지어 올리기 위한 일정관리(작업 일정에 맞춘 자재 납품, 인력, 장비),건물이 완성된 이후 인테리어, 유지보수 설계(점검/교체 주기) 건축가(아키텍트)..
[값이나 참조에 영향을 미치는지에 따라]불변 함수(immutable function) : 기존 데이터(입력값이나 외부 상태)를 변경(mutable)하지 않는 함수가변 함수(mutable function) : 입력값이나 외부 상태를 변경하는 함수 [외부 상태나 참조값에 영향을 받거나, 영향을 주는지에 따라]순수 함수(pure function) : 외부 상태를 건드리지 않으며, 입력값이 동일하면 출력값이 동일함을 충족하는 함수 불순 함수(impure function) : 외부 상태를 건드리거나, 입력값이 같아도 결과가 달라질 수 있는 함수🔷 1. 기준별 정의개념기준의미개념기준의미✅ 순수 함수입력과 출력 기준같은 입력 → 같은 출력, 사이드 이펙트 없음❌ 불순 함수입력과 출력 + 부작용 기준같은 입력 → ..
좋은 함수 이름은 함수를 사용하기 쉽고, 유지보수하기도 쉬어진다.함수의 이름을 만들 때 함수 내부 로직이 어떻게 구현되었는지를 설명하는 이름으로 함수 이름을 짓는 경우가 있는데,함수의 이름은 구현을 설명하기 보다는 함수의 용도를 설명하는 이름으로 지어야 한다. 즉, 함수의 이름은 How to do(어떻게 했는지)가 아닌 What to do(무엇을 하는지)를 설명하는 이름을 붙여야 함수의 용도를 이해하기 쉬워진다. 어떻게 구현했는지를 설명하는 이름이 아닌, 어떤 목적일 때 사용하는 함숭인지를 설명하는 이름으로 짓는다. 개념 설명:무엇을 하는지에 집중한 이름은 구현 세부사항만 보여줍니다.왜 하는지에 집중한 이름은 개발자의 의도나 비즈니스 목적을 보여줍니다.이유는?다른 개발자가 함수를 처음 봤을 때, 함수 ..
import java.time.LocalDate;import java.time.Month;public record Paystub(int amount, int bonus, String reasonCode) { public static Paystub noPay(String reasonCode) { return new Paystub(0, 0, reasonCode); }}public class Employee { private boolean isSeparated; private boolean isRetired; private int salary; public Employee(boolean isSeparated, boolean isRetired, int salary) ..
//[Before]public class Calculator { public static void main(String[] args) { List people = List.of( new Person("kim", 18, 28000000), new Person("lee", 19, 30000000), new Person("park", 20, 35000000) ); var averageAge = 0; var averageSalary = 0; for(Person person : people) { averageAge += person.getAge()..

Ch06.08 Introduce Parameter Object 매개변수 객체 만들기//[Before]public class Station {... public List readingsOutsideRange(int min, int max) { return readings.stream() .filter(t -> t.getTemperature() max) .toList(); }}//[After-Step01]public class Station {... public List readingsOutsideRange(NumberRange range) { return readings.stream() .filter(t->t.getTemperature() range.getMax()) .toList..