티스토리 뷰

 회사에서 오랫동안 고여있어서 연차가 '시니어' 위치에 있지만 'SOLID' 클래스 설계 원칙을 제대로 읽어본 적은 없는것 같다. 블로그 이름에 걸맞는 상태 ㅠㅠ 이제라도 찾아 읽어보자.

 

자바와 JUnit 을 활용한 실용주의 단위 테스트 중 'SOLID 원칙' 설명 부분 (저게 다임)

"로버트 마틴(Robert C. Martin) 아저씨가 고안한 원칙(요런거 알면 어디가서 아는 '척' 하기 좋다;;)

위 내용만 보고 이해가 안되니 다른 책을 더 찾아보자!

 

SRP (Single Responsibility Principle)

"클래스는 작고 한 가지 역할에만 충실하고 응집력이 높아야 한다."

"개별 메서드도 짧고 간결해져서 이를 검증하는 테스트의 복잡도도 같이 낮아진다."

 

OCP (Open Closed Principla)

"코드 수정 없이도 클래스의 기능을 변경할 수 있도록 하자는 애기"

"전략 패턴이 대표적인 예"

 

Head First Design Patterns 중 '전략패턴' (자세한 설명은 책을 보자)

LSP (Liskov Substitution Principle)

"바바라 리스코프"라는 분이 소개한 내용.

바바라 리스코프 (멋쟁이 할머니)

너무.. 당연한 이야기;; 위반하게 만들려면 어떻게해야하지???

 

ISP (Interface Segregation(=분리) Principla)

"인터페이스는 작고 한 가지 목적에 충실하도록 만들어야 한다"

"단일책임원칙(SRP) 의 인터페이스 버전"이라 부르기도 한단다."

 

스프링에서 이런 코드를 많이 본듯 AuthenticatedPrincipal.java 처럼 단순한 인터페이스.

public interface AuthenticatedPrincipal {

	/**
	 * Returns the name of the authenticated <code>Principal</code>. Never
	 * <code>null</code>.
	 * @return the name of the authenticated <code>Principal</code>
	 */
	String getName();

}

DIP (Dependency Inversion Principle)

"코드는 구현체가 아닌 추상 개념에 종속되어야 한다"는 원칙.

"클래스는 협력 객체를 직접 생성하지 말고 인터페이스로 건네받아야 한다"

ㄴ Setter 로 받아도 괜찮겠지?

"테스트 용이성이 크게 좋아짐"

 

 

훌룡한 내용이다 이걸.. 이제 제대로 찾아보다니 🤦‍♂️

 

참고서적

- Effective Unit Testing (대부분 여기서)

- 자바와 JUnit 을 활용한 실용주의 단위 테스트

- Head First Design Patterns 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함