
객체는 프로그램에서 실제로 존재하며, 고유한 상태(데이터)와
그 상태를 조작할 수 있는 행동(함수 또는 메서드)을 가지는 독립적인 실체
클래스는 객체를 만들기 위한 추상적인 설계도이고,
객체는 그 설계도를 바탕으로 실제로 만들어진 구체적인 실체(인스턴스)라고 할 수 있음
객체를 "생성"하는 역할
가장 넓은 접근 범위를 가집니다.
public으로 선언된 멤버는 어떤 곳에서든 접근할 수 있습니다.
가장 좁은 접근 범위를 가집니다.
private으로 선언된 멤버는 오직 선언된 클래스 내부에서만 접근할 수 있습니다.
protected로 선언된 멤버는 선언된 클래스 내부와
해당 클래스를 상속받은(파생된) 클래스 내부에서만 접근할 수 있습니다.
static 한정자(Modifier)는 클래스, 필드(변수), 메서드, 속성(Property), 이벤트 등
다양한 멤버에 적용될 수 있는 키워드입니다.
static 키워드가 붙은 멤버는 인스턴스(객체)에 속하지 않고, 클래스 자체에 속하게 됩니다.
S - 단일 책임 원칙 (Single Responsibility Principle, SRP)
하나의 클래스는 단 하나의 책임만 가져야 한다.
즉, 클래스를 변경해야 하는 이유는 오직 하나여야 한다는 뜻입니다.
O - 개방-폐쇄 원칙 (Open/Closed Principle, OCP)
새로운 기능을 추가할 때 기존 코드를 수정하는 대신, 기존 코드를 확장하는 방식으로 기능을 구현해야 한다는 의미
L - 리스코프 치환 원칙 (Liskov Substitution Principle, LSP)
상속 관계에 있는 클래스들이 올바르게 동작해야 함을 의미합니다.
부모 클래스가 사용되는 곳에 자식 클래스를 넣어도 문제가 없어야 합니다.
I - 인터페이스 분리 원칙 (Interface Segregation Principle, ISP)
클라이언트는 자신이 사용하지 않는 인터페이스에 의존해서는 안 된다.
크고 거대한 하나의 인터페이스보다는,
클라이언트의 필요에 따라 작고 구체적인 여러 개의 인터페이스로 분리하는 것이 낫다는 원칙
D - 의존성 역전 원칙 (Dependency Inversion Principle, DIP)
"1. 고수준 모듈은 저수준 모듈에 의존해서는 안 된다. 이 둘은 추상화에 의존해야 한다."
"2. 추상화는 세부 사항에 의존해서는 안 된다. 세부 사항이 추상화에 의존해야 한다."
이는 '의존성 주입(Dependency Injection, DI)'의 기반이 되는 원칙입니다.
클래스들이 구체적인 구현(저수준 모듈)에 직접 의존하기보다는, 추상화(인터페이스나 추상 클래스)에 의존해야 한다는 것을 강조.