정의 : 특정 클라이언트에 맞는 인터페이스만 구현해야 한다. 즉, 불필요한 메서드를 포함한 큰 인터페이스 대신, 작은 인터페이스 여러개로 분리해야 한다.
리엑트 기준으로 본다면 불필요한 Props를 넘기지 않고 필요한 Props를 정의하는 것으로 보면 될 것 같습니다.
예시 : 리액트 컴포넌트에서 필요 없는 props를 받지 않도록 필요한 props만 정의하기
ISP 위반 예시
하나의 컴포넌트에서 모든 기능을 처리하기 위해, ViewUser 와 EditUser 모드를 모두 저리하는 코드를 작
function UserInfo({ user, onEdit, onSave }) {
return (
<div>
<h1>{user.name}</h1>
<p>{user.email}</p>
<button onClick={onEdit}>Edit</button>
<button onClick={onSave}>Save</button>
</div>
);
}
ISP 적용 예시
// 보기 전용 컴포넌트
function UserInfo({ user, onEdit }) {
return (
<div>
<h1>{user.name}</h1>
<p>{user.email}</p>
<button onClick={onEdit}>Edit</button>
</div>
);
}
// 수정 전용 컴포넌트
function EditUser({ user, onSave }) {
const [name, setName] = useState(user.name);
const [email, setEmail] = useState(user.email);
return (
<div>
<input value={name} onChange={(e) => setName(e.target.value)} />
<input value={email} onChange={(e) => setEmail(e.target.value)} />
<button onClick={() => onSave({ name, email })}>Save</button>
</div>
);
}
이렇게 만들면 UserInfo는 보기기능만 EditUser는 수정기능만 담당하게 되며 필요한 Props만 받게 됩니다.
ISP 적용의 장점
- 책임 분리: UserInfo 와 EditUser는 각자 자신이 해야 할 일만 담당해서 책임이 명확해집니다.
- 불필요한 의존성 제거: UserInfo 는 onSave 같은 불필요한 props를 받지 않고, EditUser는 onEdit 같은 props가 필요 없음.
- 확장성: 나중에 새로운 역할이나 모드가 추가될 경우, 기존 컴포넌트를 건드리지 않고 새로운 컴포넌트를 추가할 수 있어.
'개발공부 > SOLID 원칙' 카테고리의 다른 글
D: Dependency Inversion Principle(의존성 역전 원칙, DIP) (0) | 2024.09.30 |
---|---|
O: Open/Closed Principle (개방-폐쇄 원칙, OCP) (2) | 2024.09.13 |
S : Single Responsibility Principle(단일 책임 원칙, SRP) (0) | 2024.09.13 |
2. SOLID전에 OOP의 기본 개념에 대해 알아보자! (2) | 2024.09.11 |
1. SOLID 원칙이란? (2) | 2024.09.11 |