오늘은 집중이 잘 안됐다.
객체지향 강의 들을 때도 이해가 안되니까 내용이 잘 안들어오고
자바 복습할 때도 집중이 잘 안되는 그런 날이였다.
괜시리 축축 처지고..
이러면 안돼!
계속 자바 복습할 때도 객체지향에 관련해서 공부하고 있는 중인데
코드를 손으로 따라 쳐봐도
이해가 잘 안되다.
이론은 이해가 되는데 내가 나중에 코드를 작성해야 할 생각을 하니
못할 것 같은 생각이 자꾸 든다...
힝구
그래도 기초를 탄탄히 계속 공부하면
내가 스스로 코드를 짤 수 있겠지.
연희튜터님이 저번주에 숙제로 내주신
계산기 문제를 풀어보려고 하는데
한 개 밖에 못하겠다.. 그래도 그건 결과값이 잘 나오긴 하는데
다른건 손도 못 댈 것 같다ㅠㅠ
수요일부터 프로젝트 시작인데 큰일이다증말
자바 복습은 따로 자바 시리즈에 포스팅했다.
SRP(단일 책임 원칙)
, OCP(개방-폐쇄 원칙)
,
LSP(리스코프 치환 원칙)
, DIP(의존 역전 원칙)
, ISP(인터페이스 분리 원칙)
class Galaxy {
private String serialNumber; //고유정보 -> not 변화요소
private String cpu; //특성정보 -> 변경 발생 가능성
private String memory; //특성정보 -> 변경 발생 가능성
private int battery; //특성정보 -> 변경 발생 가능성
private double weight; //특성정보 -> 변경 발생 가능성
}
-------------------------
특성 정보에 변화가 발생하면,
Galaxy 을 변화 시켜야 되는 부담이 발생함.
-------------------------
// 클래스 분리. 스펙만 관리.
class GalaxySpec {
private String cpu;
private String memory;
private int battery;
private double weight;
}
class Galaxy {
private String serialNumber;
private GalaxySpec spec;
public Galaxy(String serialNumber, GalaxySpec spec) {
this.serialNumber = serialNumber;
this.spec = spec;
}
}
확장에는 열려있고 변경에는 닫혀있어야한다.
== 변경을 위한 비용은 줄이고, 확장을 위한 비용은 극대화한다
공통화
예제
위의 코드에서 핸드폰의 종류가 계속 늘어난다면(아이폰, 샤오미 등등)
공통화 하기
class Phone {
private String serialNumber;
private PhoneSpec spec;
public Phone(String serialNumber, PhoneSpec spec) {
this.serialNumber = serialNumber;
this.spec = spec;
}
}
class PhoneSpec {
private String cpu;
private String memory;
private int battery;
private double weight;
}
class Galaxy extends Phone
class IPhone extends Phone
class 샤오미 extends Phone
class Sony extends Phone
final
예약어 사용해 선언코드는 공통적인 부분이 보이면 공통화를 시켜서 변경부분을 최소화하고 변경이 용이하게 코드를 짜야한다
그럴려면 직접 고민을 많이 해야한다
내가 작성한 코드를 남이 본다는 생각을 갖고 코드를 짜야한다.
SOLID원칙은 중요하기 때문에 이해가 안된다면 일단 암기하기!