본문 바로가기

분류 전체보기

(83)
[Pattern] Template Method Pattern Template Method Pattern 로직을 단계 별로 나눠야 하는 상황에서 적용한다. 단계 별로 나눈 로직들이 앞으로 수정될 가능성이 있을 경우 더 효율적이다. 즉, 동작 상 알고리즘의 프로그램 뼈대를 정의하는 행위 디자인 패턴이다. 특정 단계들을 다시 정의할 수 있게 해 준다. 조건 클래스는 abstract로 만든다. 단계를 진행하는 메소드는 수정이 불가능하도록 final 키워드를 추가한다. 각 단계들은 외부는 막고, 자식들만 활용할 수 있도록 protected로 선언한다. 예를 들어 A,B,C의 로직이 순서대로 실행되어야 하는 단계로 이루어져 있고 이 단계가 항상 유지되며 순서가 바뀔 일이 없다고 가정해 보았을 때, A,와 C는 변할 일이 없고 설계에 따라 B만 변한다고 해보면 아래와 같이 구..
[Pattern] Singleton Pattern Singleton Pattern 어플리케이션이 시작될 때, 어떤 클래스가 최초 한 번만 메모리를 할당하고 해당 메모리에 인스턴스를 만들어 사용하는 패턴. 즉, 인스턴스가 필요할 때, 똑같은 인스턴스를 만들지 않고 기존의 인스턴스를 활용하는 것. 생성자가 여러번 호출되더라도 실제로 생성되는 객체는 하나이며 최초로 생성된 이후 호출된 생성자는 이미 생성한 객체를 반환한다. java에서는 생성자를 private로 지정하여 다른곳에서 생성하지 못하도록 만들고, getInstance() 메서드를 통해 받아서 사용하도록 구현한다. 왜 쓸까요? 객체를 생성할 때마다 메모리 영역을 할당받아 사용해야하는데 한번의 new를 통해 객체를 생성한다면 메모리 낭비를 방지할 수 있다. 싱글톤으로 구현한 인스턴스는 전역 이므로 다..
[Pattern] Adapter Pattern Adapter Pattern 클래스를 바로 사용할 수 없는 경우가 종종 있다.(다른 곳에서 개발 or 수정할 수 없을 때) 그렇다면 중간에서 변환 역할을 해주는 클래스가 필요하다 -> 어댑터 패턴 상속을 통해 사용한다. 호환성이 없는 인터페이스를 사용하는 클라이언트 그대로 활용 가능하다. 향후 인터페이스가 바뀌더라도, 변경 내역은 어댑터에 캡슐화 되므로 클라이언트가 바뀔 필요가 없다. 즉 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환해준다.
[Pattern] 디자인 패턴 개요 디자인 패턴 개요 목적 SW의 재사용성, 호환성, 유지 보수성을 보장하기 위함. 특징 디자인 패턴은 특정한 구현이 아닌 아이디어이다. 무조건 적용해야 한다! 가 아니고 추후에 재사용, 호환, 유지 보수시 발생하는 문제를 예방하거나 해결하기 위해 패턴을 만들어 둔 것. 원칙 - SOLID(객체지향 설계 원칙) Robert C. Martin은 5가지 Software design principles을 정의하고 앞글자를 따서 SOLID라고 부른다. Single Responsiblilty Principle : 하나의 클래스는 하나의 역할만 해야한다. Open - Close Principle : 확장(상속)에는 열려있고, 수정에는 닫혀 있어야 한다. Liskov Substitution Principle : 자식이 ..
[백준] 3151번 - 합이 0 (java) Baekjoon 3151 - 합이 0 (클릭 시 이동) 문제 Elly는 예상치 못하게 프로그래밍 대회를 준비하는 학생들을 가르칠 위기에 처했다. 대회는 정확히 3명으로 구성된 팀만 참가가 가능하다. 그러나 그녀가 가르칠 학생들에게는 큰 문제가 있었다. 코딩 실력이 좋으면 팀워크가 떨어지고, 팀워크가 좋을수록 코딩 실력이 떨어진다. 그리고 출전하고자 하는 대회는 코딩 실력과 팀워크 모두가 중요하다. Elly는 그녀가 가르칠 수 있는 모든 학생들의 코딩 실력을 알고 있다. 각각의 코딩 실력 Ai는 -10000부터 10000 사이의 정수로 표시되어 있다. 그녀는 팀워크와 코딩 실력이 모두 적절한 팀을 만들기 위해, 세 팀원의 코딩 실력의 합이 0이 되는 팀을 만들고자 한다. 이러한 조건 하에, 그녀가 대회에 ..
[JPA] Spring Data JPA와 QueryDSL 이해 Spring Data JPA와 QueryDSL 이해 Spring Data JPA 소개 지루하게 반복되는 CRUD 문제를 세련된 방법으로 해결 개발자는 인터페이스만 작성 스프링 데이터 JPA가 구현 객체를 동적으로 생성해서 주입 사용법 어지간한 쿼리는 JPARepository를 상속시키면 다 구현되어 있다. 특정 조건으로 조회쿼리를 짜야할 때 인터페이스만 만들어도 알아서 SPQL을 만들어 주기도 한다. 페이징 처리도 Pageable 인터페이스를 상속받은 객체를 파라미터로 넣어주면 알아서 페이징 처리를 해준다. Pagable page = new PageRequest(1,20,new Sort...); // 정렬도 가능 page result = memberRepository.findByName("hello",p..
[JPA] 객체 지향 쿼리 객체 지향 쿼리 JPA는 다양한 쿼리 방법을 지원 JPQL JPQ Criteria QueryDSL 네이티브 SQL JDBC API 직접 사용, MyBatis, SpringJdbcTemplate 함께 사용 JPQL(java persistence query language) 가장 단순한 조회 방법 em.find(); // 객체 그래프 탐색 a.getB().getC(); JPA를 사용하면 엔티티 객체를 중심으로 개발 테이블이 아닌 객체를 대상으로 검색하는 객체 지향 쿼리 SQL을 추상화해서 특정 데이터베이스 SQL에 의존 X JPQL을 한마디로 정의하자면 객체 지향 SQL JPQL 문법 select m from Member m where m.age > 18 from절에 있는 것은 객체 엔티티와 속성은 대소문자..
[백준] 11000번 - 강의실 배정 (java) Baekjoon 11000 - 강의실 배정 (클릭 시 이동) 문제 수강신청의 마스터 김종혜 선생님에게 새로운 과제가 주어졌다. 김종혜 선생님한테는 Si에 시작해서 Ti에 끝나는 N개의 수업이 주어지는데, 최소의 강의실을 사용해서 모든 수업을 가능하게 해야 한다. 참고로, 수업이 끝난 직후에 다음 수업을 시작할 수 있다. (즉, Ti ≤ Sj 일 경우 i 수업과 j 수업은 같이 들을 수 있다.) 수강신청 대충한 게 찔리면, 선생님을 도와드리자! 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 256 MB 14977 4452 3231 29.365% 입력 첫 번째 줄에 N이 주어진다. (1 ≤ N ≤ 200,000) 이후 N개의 줄에 Si, Ti가 주어진다. (0 ≤ Si < Ti ≤ 109) ..