java를 학습하게 되면 어떤것이 중요할까?객체지향도 중요하지만, java가 어떤것인지도 굉장히 중요하다.그니까 java가 어떤식으로 코드를 읽는지 그런것도 중요하다는거다.물론 나는 "코딩만 하고 살거야"(취미면) 그러면 이 내용은 중요하지 않을 수 있다.하지만 개발자로 일할려면 이 정도는 깊게는 아니어도 어느 정도는 이해도가 있어야 된다.그래야 java가 특정한 문제가 발생하였을때 쉽게 접근 할 수 있다고 생각한다. 예를 들어 메모리 문제가 발생하면 코드를 수정하는것도 좋지만 jvm의 메모리 사양을 변경시키는 것만으로도 충분히 해결 할 수 있다.그러면 몇시간 동안 해결해야될일을 5초면 해결 할 수 있다. 이 내용을 모르면 인터넷에 검색하고 그걸 반영해야 할거다. 하지만 이거에 대해 이해를 하지 못한다면..
블로그글을 안쓴지 1년이 넘어간다. 사실 이렇게 까지 운영을 안하려고 했던건 아니였는데 어쩌다보니 이렇게 되었다. 지금까지 나는 개발자라는 직업으로 발전을 시킬 수 있을지 고민을 했다. 어떻게 하면 더 잘 할 수 있을지.. 하지만 올해는 아니였다. 개발자에 대한 능력을 키우는 것보다 내 자신에 대해 조금더 심도 깊게 생각할 시간이 필요했다. 결론부터 말하자면 의미가 없었다. 더 정확히 말하면 완전히 의미는 없지는 않는건 아니지만 글로 적기에 애매한 거 같다, 올해는 정말 미치는 듯이 놀았다. 적금도 최소한으로 하고.. 놀 수 있으면 놀고 그랬다. 공부는 하지 않고 놀았다. 올해 처음으로 해외여행도 갔다. 비록 혼자가긴 했지만 아무튼 좋았다. 뭐가 좋은지에 대해서는 적지는 않겠지만 아무튼 좋았다. 솔직히 ..
Spring data JPA에서는 많은 확장 기능을 제공하고 있다. 사용자 정의 리포지토리 구현 (잡 글) 일반적으로 Spring data JPA에서는 public interface MemberRepository extends JpaRepository {} 인터페이스를 통해서 JPA를 사용하고 있다. 근데 마이바티스 나 네이티브 쿼리를 사용하는 경우 위 인터페이스는 의미가 없어진다. 왜냐하면, JPA에서 이들을 관리할 수 없기 때문이다. 결국 이들을 사용할때 엔티티와 테이블간의 간극이 발생할 수 있다는 건데 이를 해결하는 방안으로는 강제로 영속성 컨텍스트를 초기화를 시켜줘야 가능하다. 그러면 위 인터페이스를 이용하면 어떨까? 결론부터 말하면 굉장히 비효율적이다. 아까도 말했듯이 마이바티스나 네이티브 쿼리..
인터페이스는 과연 무엇일까? interface?? 초기의 인터페이스는 void test(); 요런식으로 구현체가 없는 상태로 존재하였다. 그래서 인터페이스를 implements을 하게되면, 구현체가 반드시 필요하였습니다. 하지만 자바8부터 인터페이스에도 구현체를 작성할 수 있게 되었다. 구현체를 작성하는 방법은 총 3가지다. 1. static 2. default 3. private 원래 언제 만들어졌는지 적으려 했지만 귀찮은 관계로 넘어가자. 아무튼 이 3가지의 공통점은 구현체를 구현을 해야 된다는 점이다. 근데 여기서 드는 의문점이 있다. static, private같은 경우는 기존 클래스에서 사용법이 크게 다르지 않다. static은 메모리상에 먼저 올라가구 private는 그 클래스내에서만 사용이 ..
오랜만에 디자인 패턴을 공부하는 것 같다. 이 패턴에 대해 간략하게 설명하자면, 공통 부분을 미리 만들어 놓고 그것을 가져다 쓰는 방식이다. 이 패턴은 상속을 통해 이뤄진다. 상속? 상속을 사용한다는 뜻은 부모와 자식의 관계가 명확하다는 이야기다. 즉, 부모쪽에 공통 부분을 뽑아 내고 자식 쪽에서 그것을 오버라이딩 하는 것이다. 예제를 고민해봤는데 생각보다 쉽지 않을 것 같다. 간단하게 숫자를 계산하는 계산기를 만들어 보려구 한다. 시작 public int calculate() { return get(1, 2, 3, 4); } private int get(int... numbers) { int result = 1; for (int number : numbers) { result *= number; } r..
rollup vs cube vs grouping set 공부를 하면서 이 3가지가 굉장히 헷갈렸다. 특히 group by가 2~3개 이상 섞여있을 때 굉장히 문제를 해결하기 어려웠다. 이들을 쉽게? 해결하는 방법은 갯수를 세어 보는 방법이다. 예시 쿼리를 보여주고 싶기는 한데 그거까지 하기에는 조금 귀찮은 감이 조금 있어서 그거는 생략하도록 한다. c1 c2 count A 1 1 A 2 1 A 2 B 1 1 B 2 2 B 3 테이블이 이렇게 되있다고 생각해보자. 그럼 제일 먼저 해야 할 일은 count가 어떻게 들어 오는지 파악해야 한다. 확인 결과 (c1,c2) => A,1 이 1개라는 것을 알 수 있다. 이렇다는 것으로 미뤄봤을때 group by는 c1과 c2둘다 해당 된다는 것을 알 수 있다. 근데..
오랜만에 작성하는 것 같다. 요즘 공부하는 패턴들이 생각보다 쉽지 않아 계속 미루고 있었는데 이 패턴은 그 나마 설명할 수 있을 것 같다. 근데 중재자라고 하는데 뭐를 중재하는 걸까? 이건 현실 세계에 비교 하면서 생각하면 좋은데 비행기와 관제탑 배와 등대 라고 볼 수 있다. 이들에 대해서는 자세히는 설명하기는 어렵지만 관재탑과 등대 모두 비행기와 배를 위해 어떤 특정한 작업을 하는 느낌이다. 사실 중재자라는 이름 보다는 중간 체계?이런 이름이 더 어울리는 것 같은데 이것을 그림으로 그려보자. 이런 그림이 그려지는데 이것을 해석해보면 A 에서 B를 갈려면 X를 거쳐야 한다는 뭐 그런 것 같다. 요게 uml인데 첫번째꺼 말고 두 번째를 보면 c1이 c2에게 연락을 취하기 위해서는 mediator에 먼저 연..
퍼사드는 사실 불어다. 건물 외각이라는 뜻을 가졌다. 퀴즈를 하나 낼 태니 한번 맞춰보시길 이 회사에는 현재 몇명의 개발자가 일하고 있는가? (어디든 앉아서 일하고 있는 사람만) 이 회사는 어떤 회사일까? 첫 번째 질문 같은 경우는 즉, 화장실에 갔던가 휴가 중인 인원 등을 제외하라는 뜻이다. 아마 100%확률로 틀릴 것이다. 심지어 이 회사를 다니고 있는 사람들 모두 이 문제를 틀릴 것이다. 왜냐하면 화장실를 간 사람들을 일일이 세면서 이 문제를 맞출 이유는 없기 때문이다. 아니 애초에 말도 안되는 문제이기 때문이다. 어떻게 외각만을 보고 문제를 맞춘다는 건 말이 되지 않기 때문이다. 하지만 두 번째 질문은 대답이 가능하다. 이런식으로 외부 코드만 확인해서 외부 코드만 보고서 어떤 동작을 하는지 대략적..
디자인 패턴을 공부하면서 놓쳐서면 안되는 사실은 절대로 코드로 학습을 하면 안된다는 사실이다. 나는 브릿지 패턴을 공부하면서 이에 더 실감했다. 물론, 코드 자체도 디자인 패턴이지만 사실 그것 보다 중요한 건 어떻게 그 코드를 작성했는가가 중요하다. 인터페이스를 사용하고 클래스를 사용하는 건 그렇게 까지 중요한건 아니다. 아무튼 지금 내가 작성 하는 부분은 브릿지 패턴이다. 브릿지는 다리라는 뜻이다. 즉, 코드 상에서 다리를 내려줘야 하는데 어떤걸로 하는 것이 유리할까? 클래스로 해도 상관없고 인터페이스로 해도 상관없다. UML을 보면 인터페이스로 되어있는데 이는 사실 인터페이스 interface 이게 아니다. 그냥 추상적으로 표현 할 수 있다는 뜻이다. 저번 포스팅에서 전략 패턴에 대해 공부하였다. 전..
이 패턴 생각보다 쉽지 않다. 패턴에 대해 간략하게 설명하면 전략을 구분짓는 패턴이다. 당연한 이야기 지만 이런이야기는 누구나 할 수 있다. 그러면 다음 코드를 보고 이것이 어떤 패턴인 맞출 수 있을까? Template template = new Template(new Action()); 지금까지 학습한 팩토리, 추상 팩토리, 빌링, 프로토 패턴인데 이것만 봐도 아쉽게도 전략패턴인지 확신을 가질 수 없다. 이는 저번 포스트에서 말했듯이 관점에 따라 패턴의 이름이 달라질 수 있다. 디자인 패턴을 공부하면서 빌더 패턴 처럼 딱 떨어지는 패턴이 있는 반면에 대부분 패턴들은 딱 떨어지지 않는다는 사실을 알 수 있다. 누군가가 위 코드는 추상 팩토리 패턴이라고 말한다면, 틀린것일까? 지금은 추상 팩토리와 전략 패..
디자인 패턴을 공부하면서 하나씩 공부할때는 생각보다 쉬운데 여러개를 동시에 공부하거나 다른 패턴을 공부를 해야 되는 상황이라면 헷갈리는 경우가 굉장히 많았다. 디자인 패턴에서는 이러한 양상이 종종 발생이 되며, 대표적으로 팩토리 메소드 패턴이랑 추상 팩토리 패턴이 존재한다. 이렇게 비슷한 패턴들이 많은 이유는 관점때문이라고 한다. 그러면 이 두개의 패턴은 어떻게 관점이 다른지 확인해보자. 어떻게 보면 두 개모두 팩토리 즉, 공장에서 무언가를 만드는 듯한 느낌을 준다. 그러면 뭐가 다른 걸까? 이름 부터 이 두가지 패턴은 다르다는 느낌을 강력하게 받는다. 처음에 팩토리 패턴을 생각했을 때, 인터페이스 또는 추상 클래스를 통해 만든것을 직접적으로 사용한다고 생각했다. 물론, 이게 맞을 수 있겠지만, 이 접근..
싱글톤 패턴은 내가 생각하기에 가장 만들기 쉬우면서 가장 위험한? 패턴이라 생각이 든다. 원래 블로그를 작성하지 않고 머릿속에 정리할 생각이 었지만 아무리 생각해도 답이 나오지 않다는 생각에 이렇게 작성하게 되었다. 일단 싱글톤 패턴이 무엇인지 부터 생각 해야 된다. 싱글톤 패턴은 싱글, 즉 객체가 하나로 나오는 패턴이다. 우리가 알기로는 일반적으로 객체는 생성할때마다 다른 객체가 나오는 것이 당연한이야기다. 다시말해 사람이라는 클래스가 존재한다면, 각자 다른 사람인것 처럼 객체도 마찬가지로 생성할때마다 다르게 나오는게 정상이다. 싱글톤 패턴은 이 정상적인 행동을 제약하는 패턴이라 생각이 든다. 위에서 언급했듯이 싱글톤 패턴을 이용하게 되면 아무리 객체를 많이 만들어도 같은 객체가 나온다는 뜻이다. 근데..