[Java] 객체 지향 프로그래밍의 5가지 기본 원칙 SOLID 를 예제와 함께 알아 보자. (2)
·
Programming Language/Java
인터페이스 분리 원칙 (Interface segregation principle, ISP)클라이언트별로 세분화된 인터페이스를 만들어야한다. 인터페이스를 분리한다는 점에서 앞서 1편에서 살펴보았던 단일책임원칙과 동일하다.그러나 분리하는 관점 자체가 다르다.    인터페이스 분리 원칙이 깨진 상황public interface Repository { void createUser(); User findUserById(Long id); void createArticle(); Article findArticleById(Long id);}public class UserRepository implements Repository { @Override public void createUse..
[Java] 객체 지향 프로그래밍의 5가지 기본 원칙 SOLID 를 예제와 함께 알아 보자. (1)
·
Programming Language/Java
SOLID란?로버트 마틴이 2000년대 초반에 이름붙인 객체 지향 프로그래밍/설계의 5가지 기본 원칙의 앞글자를 딴 약어 SOLID 객체지향의 4대 원칙 - 캡슐화, 상속, 추상화, 다형성다형성 - 똑같은 클라이언트 코드로 안에 들어있는 존재에 따라 다른 동작이 수행되는 것      단일 책임 원칙 (Single responsibility principle, SRP)하나의 클래스는 하나의 책임만을 가져야 한다. 하나의 클래스가 여러개의 책임을 가진다면, 그 클래스의 코드가 변경되어야할 이유가 여러개가 생긴 것이다. 단일 책임 원칙을 지키는 코드는 각각의 클래스가 응집력이 높기 때문에, 코드의 재사용성이 높아지고, 캡슐화를 통해 한 클래스의 변경이 다른 클래스에 영향을 미치지 않도록 만든다.      개방..
[Java] 의존 관계에 대해 예제와 함께 알아보자.
·
Programming Language/Java
의존이란 무엇인가?A 는 B 에 의존적이다.A 는 B 의 변화에 민감하게 반응한다.B 는 A 의 변화에 민감하게 반응한다고 할 수 없다.물건의 가격은 공급에 의존적이다.물건의 가격은 공급에 민감하게 반응한다.공급은 물건의 가격의 변화에 민감하게 반응한다고 할 수 없다.   클래스끼리 의존 관계 맺기public class RealMessageSender { public void send() { // 실제로 메시지 보내기 }}public class FakeMessageSender { public void send() { // 메시지는 안보내고 메시지를 보냈다는 로그만 찍기 }}// Client 는 FakeMessageSender 에 의존public class Client { publ..
[Java] stream API 와 Optional
·
Programming Language/Java
실무에서 자주 발생하는 상황에 stream API와 Optional 적용하기 백엔드 실무에서 자주 발생하는 일데이터에서 데이터를 조회한다.특정한 조건을 만족하는 데이터가 있는가?없다 -> 예외 발생!있다 -> 다음 작업 실행    for + if로 처리하기 vs stream API + Optional로 처리하기list 에서 1234 를 찾는 과정을 살펴보겠다.  for + if로 처리하기 public class ForAndIfFilterExampleMain { public static void main(String[] args) { int[] integerArray = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; List integerList = Arrays...
[Java] stream API를 예제와 함께 알아보자.
·
Programming Language/Java
stream APIpublic class ForIterationExampleMain { public static void main(String[] args) { List integerList = new ArrayList(); integerList.add(10); integerList.add(20); integerList.add(30); integerList.add(40); integerList.add(50); integerList.add(60); integerList.add(70); for (int i = 0; i -> stream API 를 사용하지 않을 때. for 의 iterator..