Spring/스프링입문을 위한 자바객체지향의 원리와 이해 37

ISP - 인터페이스 분리 원칙

『스프링입문을 위한 자바 객체지향의 원리와 이해』로 공부한 내용을 정리한 글입니다. ISP - 인터페이스 분리 원칙이란?“클라이언트는 자신이 사용하지 않는 메서드에 의존하면 안 된다.”— 로버트 C. 마틴 즉, 인터페이스는 필요한 기능만 제공해야 하며, 불필요한 기능은 포함해서는 안 된다는 원칙입니다. 여러 기능이 섞인 거대한 인터페이스를 하나 만들어 놓으면, 일부 기능만 사용하는 클라이언트도 나머지 불필요한 기능들까지 의존해야 하므로 문제가 생깁니다. 단일 책임 원칙을 적용하기 전 남자 클래스하나의 클래스(남자)가 여러 역할(여자친구, 아들, 사원, 소대원 등)을 모두 가지고 있음.그 안에는 다음과 같은 메서드가 있음:기념일 챙기기()키스하기()효도하기()엄마와 대화하기()출근하기()야근하기()사격하기..

LSP - 리스코프 치환 원칙

『스프링입문을 위한 자바 객체지향의 원리와 이해』로 공부한 내용을 정리한 글입니다. "서브 타입은 언제나 자신의 기반 타입(Base Type)으로 교체할 수 있어야 한다."— 로버트 C. 마틴즉, 자식 클래스가 부모 클래스 타입으로 교체되더라도 프로그램의 동작에 아무런 문제가 없어야 한다는 뜻입니다. 상속의 의미객체 지향에서의 상속은 단순한 "계층" 또는 "조직"이 아니라, 분류의 관계여야 함.상속받는 하위 클래스는 부모 클래스의 역할을 온전하게 수행할 수 있어야 한다. 예시 ①: “아버지 = new 딸;”아버지 참조 변수에 딸 인스턴스를 넣은 상황을 예시로 듬.아버지 역할은 예를 들면 가족 부양, 돈 벌기, 권위 행사 등이 있을 수 있는데,딸 클래스가 이 역할을 온전히 수행할 수 없다면, 이는 리스코프..

OCP - 개방 패쇄 원칙

『스프링입문을 위한 자바 객체지향의 원리와 이해』로 공부한 내용을 정리한 글입니다. 개방 폐쇄 원칙 (Open-Closed Principle) 이란?"소프트웨어 엔티티(클래스, 모듈, 함수 등)는 확장에는 열려 있어야 하고, 변경에는 닫혀 있어야 한다."— 로버트 C. 마틴 (Robert C. Martin)이 말은 즉, 기존 코드를 수정하지 않고도 기능을 확장할 수 있어야 한다는 뜻입니다. 즉, 변경이 필요한 상황이 오더라도 기존 코드를 뜯어고치지 않고 새 코드를 추가해서 해결할 수 있어야 합니다. 잘못된 설계 예시: 자동차 운전 습관 클래스다음과 같은 예를 보겠습니다.한 남자가 수동 변속기 차량(기어 조작과 창문 수동 조작 포함)을 운전한다고 가정해봅시다. 이 남자 클래스는 수동운전()이라는 메서드를 ..

SRP - 단일 책임 원칙

『스프링입문을 위한 자바 객체지향의 원리와 이해』로 공부한 내용을 정리한 글입니다. “어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다.”이 말은 하나의 클래스는 하나의 책임만 가져야 하며, 변경 사유도 하나여야 한다는 원칙입니다. 책임이 둘 이상이면, 여러 가지 이유로 그 클래스가 자꾸 바뀌게 되며, 유지보수와 확장이 어려워집니다. 사례 1: 책임이 너무 많은 클래스예를 들어, 남자라는 클래스가 있다고 가정합시다.이 클래스는 다양한 사람들과의 관계 속에서 다양한 역할을 수행하고 있습니다:여자친구 입장에서: 남자친구 역할어머니 입장에서: 아들 역할직장 상사 입장에서: 사원 역할소대장 입장에서: 소대원 역할이 클래스 하나에 다음과 같은 행동들이 포함되어 있다면?기념일 챙기기키스하기효도하기출근하기사..

객체 지향 설계의 품질을 높이기 위한 SOLID 원칙

『스프링입문을 위한 자바 객체지향의 원리와 이해』로 공부한 내용을 정리한 글입니다.SOLID가 등장하게 된 배경과거에는 절차지향적인 설계가 중심이었지만,점점 소프트웨어 규모가 커지고 유지보수가 중요해지면서객체 지향 설계(Object Oriented Design)라는 방법론이 각광받게 되었습니다.그 흐름 속에서 로버트 C. 마틴(Robert C. Martin)이라는 유명한 소프트웨어 엔지니어가2000년대에 좋은 객체 지향 설계를 위한 5가지 원칙을 정리했는데,그 다섯 가지의 첫 글자를 따서 만든 것이 바로 SOLID입니다.그리고 이 원칙들은 마이클 페더스(Michael Feathers)라는 또 다른 엔지니어가 명명했다고 되어 있습니다. SOLID의 구성 5가지 원칙SSingle Responsibility ..

인터페이스

『스프링입문을 위한 자바 객체지향의 원리와 이해』로 공부한 내용을 정리한 글입니다. 인터페이스는 어떤 멤버를 가질 수 있나?자바에서 인터페이스는 다음과 같은 멤버만 가질 수 있습니다:변수public static final (생략해도 자동으로 붙음)메서드public abstract (생략해도 자동으로 붙음) 예시 코드:interface Speakable { double PI = 3.14159; // 자동으로 public static final 붙음 void sayYes(); // 자동으로 public abstract 붙음}그래서 인터페이스 내에서는 아래처럼 쓸 수 있어도 컴파일러가 자동으로 키워드를 붙여줍니다. 인터페이스의 상수 사용 방식인터페이스에 정의된 정적 상수는 다음처럼 사..

instanceof 연산자

『스프링입문을 위한 자바 객체지향의 원리와 이해』로 공부한 내용을 정리한 글입니다. instanceof 연산자란?instanceof는객체가 어떤 클래스의 인스턴스인지, 또는 어떤 인터페이스를 구현했는지를 확인하는 연산자입니다.형식:객체참조변수 instanceof 클래스명이 결과는 true 또는 false로 반환됩니다.해당 객체가 그 클래스(또는 자식 클래스)의 인스턴스라면 true, 아니면 false입니다. instanceof는 객체의 ‘실제 타입’을 기준으로 판단합니다즉, 변수의 선언된 타입이 아닌, new로 생성된 실제 객체가 기준입니다.예시 1: 클래스 상속 관계class Animal {}class Dog extends Animal {}public class Main { public stati..

final 키워드

『스프링입문을 위한 자바 객체지향의 원리와 이해』로 공부한 내용을 정리한 글입니다.final 키워드는 '변경할 수 없다'는 의미입니다.자바에서 final은 "최종의", "한 번만", "변경 불가"의 뜻을 가지고 있으며,다음 세 가지 대상에 사용할 수 있습니다:클래스변수메서드 클래스에 final이 붙으면: 상속 금지final class Animal { // ...}이렇게 선언된 클래스는 더 이상 자식 클래스를 만들 수 없습니다.즉, class Dog extends Animal 이렇게 쓰면 컴파일 에러가 발생합니다.왜 사용할까?의도하지 않은 확장을 막고, 해당 클래스의 동작을 변경 불가능하게 고정하고 싶을 때 사용합니다.예시:String, Integer 같은 자바의 핵심 클래스들도 final로 선언되어..

static 블록

『스프링입문을 위한 자바 객체지향의 원리와 이해』로 공부한 내용을 정리한 글입니다. 자바에서는 클래스가 메모리에 처음 로딩될 때 실행되는 특별한 코드 블록이 있습니다. 바로 static 블록입니다. 생성자처럼 객체를 생성할 필요 없이, 클래스 자체가 처음 사용될 때 한 번만 실행됩니다. 이 블록은 클래스 초기화 작업에 사용되며, 일반적으로 static 필드 설정이나 초기 메시지를 출력하는 데 쓰입니다. static 블록의 정의와 기본 예제public class 동물 { static { System.out.println("동물 클래스 레디 온!"); }}위 코드는 동물 클래스가 처음 로딩될 때 실행될 static 블록입니다.생성자가 없어도, 이 블록은 반드시 클래스가 메모리에 올라올..

캡슐화

『스프링입문을 위한 자바 객체지향의 원리와 이해』로 공부한 내용을 정리한 글입니다. 접근 제어자: 정보 은닉의 핵심 원리객체지향 프로그래밍에서 "캡슐화(encapsulation)"란, 객체의 내부 상태(데이터)를 외부에서 직접 접근하지 못하도록 감추고, 허용된 방식으로만 접근할 수 있게 만드는 정보 은닉(information hiding) 기법입니다.자바에서는 이 캡슐화를 접근 제어자(access modifier)를 통해 구현합니다. 클래스 멤버(필드와 메서드)에 접근을 제한함으로써, 외부로부터의 불필요하거나 위험한 접근을 방지하고, 소프트웨어의 유지보수성과 안정성을 높입니다. 자바의 4가지 접근 제어자접근 제어자클래스 내부같은 패키지다른 패키지의 자식 클래스외부 클래스private✅ ❌ ❌ ❌ (def..