자바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); 이름 기반 매핑의 경우 ..
HTTP 메세지 형식에 대해 알아보자. 요즘 자바로 그냥 간단한 웹서버를 만들어보고 있는데 HTTP 메세지 파싱을 하기위한 코드가 매우 지저분하다. HTTP 메세지에 이런 규약이 있다는걸 모르는 상태에서 코드를 작성하다보니 숱한 분기문이 등장하게 된건데 이런 형식이 있다는걸 알았으면 좀 더 깔끔해질것 같다. 1. 요청(Request) 메세지 [메서드] [URL] [버전] [헤더] [바디] 메서드 : HTTP method ex. GET, POST, PUT, DELETE, OPTION, HEAD... URL : 요청URL ex. www.naver.com 버전 : HTTP version ex. http/1.1 헤더 : HTTP header ex. Content-type: application/json 바디 :..
객체를 초기화할때는 보통 생성자를 이용하게된다. 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() ..
비슷한것 같고, 알게 모르게 혼용하는 단어이지만 확실히 구분하라고 물어보면 어려워보이는 단어인데 임백준님의 책을 보다가 알기쉽게 설명해주셔서 정리해놓는다. 동시성여러가지일을 한꺼번에 다루는것을 말한다. 병렬적(같이)으로 실행되는것과는 다르다. 내가 프로젝트를 2개 뛴다고해서 2개의 프로젝트를 동시에 개발하는건 아니다. A를 개발할땐 B가 멈출것이고, B를 개발할땐 A가 멈출것이다. 병렬한꺼번에 일을 처리하는 것을 말한다. 내가 그림자 분신술을 써서 A, B 프로젝트를 같이 진행하면 이것은 병렬이다. 100만개의 요소가 들어있는 숫자배열이있다. 이 배열의 모든 요소들에 2를 곱하려한다. 이때 배열을 25개씩 4등분하여 동시에 2를 곱하는것은 병렬적이다. 참고문헌폴리글랏 프로그래밍7가지 동시성 모델
자바를 이용해 파일 입출력 작업시 주로 io 패키지를 이용하게된다. io를 다듬은 nio(new io) 패키지가 처음 등장한게 JDK1.5 이니 상당히 오래된 셈이지만, 상당수(내가 본 바로는 전부 다) 자바 입문서들과 블로그들이 파일입출력을 io 패키지로 소개하고있어 nio에 대해 잘 모르는 개발자들이 많다. 요즘 논블럭킹(Non-Blocking)이 이슈가 되면서 io를 논블럭킹으로 처리해주는 nio도 많이 주목을 받고있는데 이 때문인지 nio 의 n 이 non blocking인줄 알고있는 분들도 많다. 하지만 위에 괄호에 써놨듯 n 은 단지 new이며, 1.7에는 nio2 패키지가 추가되어있는 상태다. 패키지작명에 좀 실패한 케이스가 아닌가 싶다. 이번 포스팅에서는 nio를 깊게 들여다보는것보다는 아..
요즘 You don't know JS 라는 책을 보고있는데 배열 생성 방식에 대한 부분에 지면을 꽤나 할애하고있어 해당 부분에 대한 정리와 내 생각을 포스팅하고자한다. 1. 배열생성자바스크립트에서 배열을 생성하는 방식은 2가지가 있다. 여타 객체를 생성하듯 생성자를 사용할 수도 있고 언어차원에서 제공하는 리터럴 방식을 사용할 수도 있다. 보통은 타이핑 양도 적고, 가독성에서도 우월하고 성능에서까지 좋은 리터럴 방식을 권장하고, 사용한다. 개인적으로 리터럴 표현이 아닌 생성자를 사용해야할 경우는 아무리 생각해도 떠오르지않는다. var arr1 = []; var arr2 = new Array(); IDE 마저도 리터럴로 바꾸라고 한다. 2. 배열 생성자이미 리터럴의 우수함때문에 생성자를 사용할 이유가 없지만..
- Total
- Today
- Yesterday
- JavaScript Core
- OOP
- 정규표현식
- Design Pattern
- JPA
- javascript
- http
- frontend개발환경
- TEST
- java
- db
- mariadb
- backend개발환경
- spring cloud
- toby
- Git
- frontcode
- go-core
- code
- Spring
- MySQL
- servlet
- Kotlin
- DesignPattern
- Jackson
- EffectiveJava
- programming
- clean code
- generics
- java8
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |