스프링 부트를 공부하면서 DI라는 말은 많이 들어보았습니다. 그런데, 정작 왜 쓰는지는 잘 몰랐습니다. 그래서, 간단하게 정리해 보고자 합니다. 혹여나, 부족한 게 있으면 덧글로 피드백 주시면 감사하겠습니다. 자동차를 만들기 위해서, 바퀴가 필요하다고 해 보겠습니다. 그러면, 아래와 같은 의존 관계를 가지게 됩니다. 위상 정렬하고 뭔가 유사한 거 같은 것 같은 건 기분 탓이 아닐 겁니다. 선행 후행 관계가 있으니, 유사할 수 밖에 없겠네요. 이제, 이런 상황을 생각해 봅시다. 차 한 대를 만들기 위해서, Tire interface를 implements한 Tire1을 4개 넣어야 한다고 생각해 보겠습니다. 제가 구현한 KTire, HTire, Main, Car 클래스를 보겠습니다. 먼저, Tire 클래스입..
디자인패턴 검색 결과
이펙티브 자바를 보면, 다중 정의를 사용할 때에는 신중하게 하라고 되어 있습니다. 이펙티브 자바 3판의 아이템 52를 잘 읽어보면, 어떨 때 overloading을 신중하게 써야 하는지를 알려주는데요. 그 중 하나의 예로, ArrayList의 remove를 들고 있습니다. 이에 대한 글은, 하도 질문이 들어와서 예전에 레퍼런스 분석에도 상세히 썼던 기억이 납니다. 그나마 이건 단순한 편이지, 상황이 조금이라도 더 복잡해 지면. 왜 그 책에서, remove를 짚어서 이야기를 했을까 고민을 해 보겠습니다. 보시면, remove는 int를 받는 것이 있고, Object를 받는 것이 있습니다. 파라미터가 다릅니다. 물론, 리턴형도 다르지만, 리턴형만 다르다고 오버로딩이 되었다고 하지는 않습니다. 이 글에서도 언..
이번 시간에는 빌더 패턴에 대해서 알아보겠습니다. 이전에 언급한 객체의 완전한 상태, 메서드 체이닝, setter 관련 글을 보고 오시면 더 좋습니다. 그리고 HashMap이나 CharsetDecorder에서는 왜 빌더 패턴이 안 보이나도 같이 고민해 보면 좋을 듯 싶습니다. 생성자에 인자가 많은 것이 있음에도. 먼저, Model에서 x와 y가 필수 필드라고 해 보겠습니다. 그러면, 우리는 아래와 같은 생성자를 생각해 볼 수 있습니다. 아예 생성자에서 x와 y를 받게끔 해 버리면 그만입니다. 간단합니다. 그러면, p가 x만 있거나 y만 값이 있거나, 혹은 둘 다 값이 없는 불완전한 상태에서는 벗어날 수 있습니다. 사실, x와 y만 있는 경우에는 그냥 이렇게 생성자만 둬도 무난할 겁니다. 굳이 아래와 같이..
setter나 getter는 엄청나게 쓰는 메서드들이기도 합니다. 그런데, 문득 setter는 왜 사용을 지양해야 한다고 할까? 에 대해서 곰곰히 생각해 보게 되었습니다. 사실, 이 질문에 대해서, 명확하게 떨어질 만한 답을 찾지 못하였습니다. 대신에, 외부에서 세터 를 호출해서, 변경이 되면 위험한 속성들에 대해서 다시 생각해 보게 되었습니다. 그에 대한 답 부터 해 보도록 하겠습니다. setter는 객체의 속성을 변경하는 메서드입니다. 예를 들자면 Dog라는 모델이 age와 이름을 가지고 있을 때, setName은 이름을 바꿔줄 때 쓰고, setAge는 나이를 바꿔줄 때 쓰입니다. 굳이 이들의 존재에 대해서 잘 모르더라도, Collections를 보시면 쉽게 찾을 수 있습니다. 예를 하나 들어보겠습니..
저번 시간에 객체의 완전한 상태에 대해서 이야기를 했습니다. 이번 시간에는, method chaining에 대해서 알아보겠습니다. Dog 클래스가 있다고 해 보겠습니다. name과, 출생 년도, 그리고 동물 등록 번호를 필드로 가지고 있습니다. 평범한 getter와 setter가 있습니다. Name과 Reg_id에 세터가 있는 이유는 dog가 생성되고 나서, 시간이 지난 후에도 바뀔 수 있는 속성이기 때문입니다. 반면에, 태어난 연도인 year는 바뀌지 않습니다. 그러니, setter 등으로 열어둘 필요가 없습니다. 그래서, year는 setter가 없습니다. 단지 객체가 만들어 지고 초기화 하는 과정에서만 값이 들어갈 뿐입니다. 이 정도 보고 넘어가시면 될 듯 합니다. 그리고 toString을 over..
최근댓글