SOLID는 객체지향의 이상적인 설계 원칙들을 의미한다.
이런 설계 원칙들을 한 줄로 요약하면 응집도는 높이고, 결합도는 낮은게 좋게 설계하라는 것이다.
그렇다면 응집도와 결합도는 뭘까? 간단히 말하자면
응집도 : 모듈이 독립적인 기능으로 정의되어 있는 정도
결합도 : 모듈간에 상호 의존하는 정도 똔느 두 모듈 사이의 연관 관계
하나의 클래스에서 여러 동작(메소드)을 하게끔 설계하는 것은 SRP 설계에 위반된다는 행위를 말하는 것이다.
public class Report {
private String title;
private String content;
public Report(String title, String content) {
this.title = title;
this.content = content;
}
public void printReport() {
System.out.println("Title: " + title);
System.out.println("Content: " + content);
}
public void saveToFile(String fileName) {
try {
java.io.FileWriter writer = new java.io.FileWriter(fileName);
writer.write("Title: " + title + "\\n");
writer.write("Content: " + content + "\\n");
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
추상화와 연관이 있다.
예를들어 구글 로그인 짜고나서 네이버 로그인이 필요할 때 호출한 쪽과 정의한 쪽 다 수정해줘야 한다.
화면가져다 쓰는데 다 고쳐줘야한다.
그런데 이거를 로그인이라고 추상화만 해놓으면 네이버를 붙이던 구글을 붙이면서 수정할 때 그냥 따로 추상화를 가져와서 수정만 하면 되기때문에 개방되어있는것은 추상화해둔데 그리고 폐쇄는 네이버나 구글을 수정해두는데라고 볼 수 있다.
그러니까 한 단계 올려서 두리뭉실하게 추상화 해두는 것을 추상화라고한다.
이거를 인터페이스라고 할 수 있다. 이게 인터페이스를 쓰는 이유라고 볼 수 있다.
==>그래서 추상화란 확장시키기 위해 두리뭉실하게 해 둔 것 얘를 OCP라고 한다.
확장에 대해서는 개방되어 있어야 하고 , 수정에 대해서는 폐쇄되어야 함
이를 위해 추상화, 인터페이스, 다형화를 이용할 수 있다.