EPL 팀의 리그순위 정보를 담고있는 객체를 만든다고 생각해보자. 보통 순위페이지에 나와있는 정보는 경기 수, 승점, 승, 무, 패, 득실차가 있다. 이 데이터들을 담는 클래스를 정의하자. class Team{ private String name; private int playCount; private int victoryPoint; private int winCount; private int drawCount; private int loseCount; private int scorePoint; } 이 객체를 생성하고, 필드들을 주입해줘야한다. 간단하게 setter를 만들어서 주입할 수 있다. Team team = new Team(); team.setName("맨유"); team.setPlayCount(..
이전에 올렸던 포스팅중에 Custom Serializer, Deserializer 만들기 가 있었다. 작성해놓고 나 스스로도 자주 다시보며 유용하게 써먹었던 포스팅인데 이번에 한가지 추가적인 경우를 맞이했다. 해당 필드에 특정 애노테이션이 달려있으면 기본 Serializer 를 사용하고, 없을 경우엔 CustomSerializer 를 사용 이라는 경우였다. 일단 애노테이션이 붙었는지를 먼저 검사해야하는데 그럴땐 리플렉션을 쓸수밖에 없었다. 그런데 직렬화를 할때마다 리플렉션을 사용하는건 비용이 좀 크지않나 라는 생각이 들었다. 그리고 분명히 이런 고민을 전세계에서 꽤 많이 했을 것 같은데 너무 원시적으로 문제를 해결하려는게 아닌가 라는 생각에 이리저리 검색을 좀 해봤다. 역시 이런고민은 이미 수많은 지구인..
자바7에서 추가된 Objects 클래스는 여러 유틸메서드를 제공하고있다. 이중 유용한 메서드들을 몇가지 알아보자. 1. equals()null에 대한 방어를 위해 이런코드를 작성한적이 한번쯤 있을것이다. public void method(String str1, String str2){ if(str1 != null && str1.equals(str2)){ } } str2는 인자로 활용되기때문에 null 체크를 굳이 할필요가 없지만 메서드 호출 객체인 str1이 null 이면 NPE가 발생하기때문에 이런식으로 방어코드를 작성하게된다. 이런 코드는 실무에서도 흔히 볼 수 있는데 null 체크는 자칫하면 빼먹기 쉬워 골칫덩이가 되곤한다. Optional로 우아하게 처리하는 방법도 있지만 str1과 str2가 모..
JPQL 작성 후 파라미터를 매핑하는 방법은 인덱스에 기반한 방법과 이름에 기반한 방법이 있다. 1. 인덱스 매핑@Query("SELECT e FROM Expense e WHERE e.id = ?1") List findById(Long id); spring-data-jpa 를 사용시 id를 이용해 조회하는 쿼리를 자동 생성해주므로 저런식으로 JPQL을 만들필요는 없지만 예제코드임을 기억하자. 이런식으로 인덱스를 사용할 수 있으며 인덱스는 1부터 시작한다. 2번째 파라미터의 경우 ?2 로 매핑해주면 된다. 2. 이름 매핑@Query("SELECT e FROM Expense e WHERE e.id = :#{#id}") List findById(@Param("id") Long id); 이름 기반 매핑의 경우 ..
객체를 초기화할때는 보통 생성자를 이용하게된다. class Person { private int age; public Person(){ this(29); } public Person(int age){ this.age = age; } } 스프링 빈을 이용할때는 빈 라이프사이클에 알맞는 초기화 방법들을 제공하고있는데 그것들에 대해 알아보자. 1. InitializingBean, DisposableBean Interface스프링은 초기화, 소멸을 지원하기위한 인터페이스를 제공하는데 그것이 InitializingBean, DisposableBean이다. public interface InitializingBean { void afterPropertiesSet() throws Exception; } public ..
생성자를 통한 주입, 설정자(setter)를 통한 주입은 평소에도 많이 사용해오던 방식이라 익숙한데 static factory method를 이용한 spring bean 생성은 어렵다기보다 익숙하지않았다. 그래서 간략하게 정리를 해보고자 한다. 1. static factory Methodclass Person { private int age; public static Person newInstance(int age) { Person person = new Person(); person.age = age; return person; } private Person(){} } Person 클래스가 있고 해당 클래스의 인스턴스를 생성하는 팩토리 메서드를 제공한다. 팩토리메서드의 사용을 강제하기위해 기본생성자는 ..
프로그래밍을 하다보면 이런저런 상황에 이름이 겹치는 경우가 발생한다. 가장 대표적인건 오버라이딩이나 오버로딩과 같은 것들도 이름이 겹치는걸 활용한 기법이라고 볼 수 있다. 그 용어들에 대한 내용을 정리한다. 1. 오버라이딩하위 클래스에서 상위 클래스 혹은 인터페이스의 메서드 시그니처를 동일하게 작성하여 말 그대로 메서드를 재정의 하는 것. 어떤 메서드를 호출할지는 동적으로 정해지며(동적 디스패치) 다형성의 핵심이 되는 기능.* 동적디스패치 포스팅 : http://multifrontgarden.tistory.com/133 interface Testable{ void test(); } class OverrideTest implements Testable{ @Override public void test() ..
자바를 이용해 파일 입출력 작업시 주로 io 패키지를 이용하게된다. io를 다듬은 nio(new io) 패키지가 처음 등장한게 JDK1.5 이니 상당히 오래된 셈이지만, 상당수(내가 본 바로는 전부 다) 자바 입문서들과 블로그들이 파일입출력을 io 패키지로 소개하고있어 nio에 대해 잘 모르는 개발자들이 많다. 요즘 논블럭킹(Non-Blocking)이 이슈가 되면서 io를 논블럭킹으로 처리해주는 nio도 많이 주목을 받고있는데 이 때문인지 nio 의 n 이 non blocking인줄 알고있는 분들도 많다. 하지만 위에 괄호에 써놨듯 n 은 단지 new이며, 1.7에는 nio2 패키지가 추가되어있는 상태다. 패키지작명에 좀 실패한 케이스가 아닌가 싶다. 이번 포스팅에서는 nio를 깊게 들여다보는것보다는 아..
자바를 이용해 외부 자원에 접근하는 경우 한가지 주의해야할 점은 외부자원을 사용한 뒤 제대로 자원을 닫아줘야한다는 점이다. public static void main(String[] args) { FileInputStream fis = null; try{ fis = new FileInputStream(""); }catch(IOException e){ }finally { fis.close(); } } 이정도로 끝나면 좋겠지만 문제는 저 close() 메서드도 Checked Exception 인 IOException 을 던지므로 이런 코드가 나타난다. public static void main(String[] args) { FileInputStream fis = null; try{ fis = new File..
얼마전 사내에서 작업했던 내용이다. 간단한 코드긴하지만... 코드는 각색해서 해당 내용을 포스팅하고자 한다. 1. Utils 클래스1-1. Utils 클래스 생성 요구사항 * 현재 전화번호, 주민번호, 카드번호 데이터는 - 없이 순수 숫자로만 저장되어있다. * 해당 데이터를 노출할때 -를 추가하고싶다. 음...뭐 딱히 어렵지 않은 내용이다. 어떤 내용으로 작업할지 고민을 했고, 특정 상태에 얽매이는게 아니라 인자로 넘어오는 값의 양식만 변경하면 되니 정적 메서드로 만들어도 충분하다고 판단했다. 그렇게 FormatUtils 클래스가 추가됐다. class FormatUtils { private static final String TEL_NO_PATTERN = "(02|0[\\d]{2})([\\d]{3,4})..
- Total
- Today
- Yesterday
- Kotlin
- db
- mariadb
- frontcode
- http
- JPA
- javascript
- generics
- servlet
- TEST
- code
- 정규표현식
- java
- spring cloud
- programming
- Design Pattern
- Git
- clean code
- Spring
- JavaScript Core
- frontend개발환경
- Jackson
- java8
- DesignPattern
- backend개발환경
- toby
- go-core
- OOP
- MySQL
- EffectiveJava
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |