본문 바로가기

자바 메서드 '잘' 작성하는 방법, 알면서 못 지키는 것들(이펙티브 자바 스터디 - 메서드) 어떻게 해야 메서드 잘 만들었다고 소문이 날까? 개발을 하면서 가장 많이 하는 일이면서 가장 난해한 것이 메서드 작성이 아닐까 싶다."하나의 메서드에서는 하나의 작업만 한다!" 라는 기본 원칙을 지키려고 하면서도 잘 안된다.사소하게는 private으로 할지 public으로 해야 할지등 정해야할 것들이 너무도 많은 것이 메서드다.역시나 한 번에 제대로 작성하려고하면 어렵다. 대신 유념하면서 고치고 또 고치면서 배우는게 코딩아닐까 싶다.회사를 다닌다면 코드 리뷰를 하는 이유도 올바른, 좋은 메서드를 개발하기 위함이 아닐까 한다.결국 좋은 메서드를 만드려면 기본 원칙을 잘 알고 시도하고 리팩토링을 거쳐봐야 한다. 그래서 아래에 기본 원칙을 소개하려고 한다.메서드 작성 기본 원칙 - 파라미터가 유효한지 검사하라..
일반적인 프로그래밍 원칙(effective java 3판 스터디, 자바에서 경계해야할 것들 간단 정리) 일반적인 프로그래밍에서 하지 말아야할 것 먼저 일반적인 프로그래밍에서 하지 말아야할 것에 대해 말하기 전에 소개하고 싶은 것이 있다.이 글은 이펙티브 자바 3판을 읽으면서 처음쓰는 글이다.그런데 포스트의 내용은 첫 장에 나오는 내용이 아니라 중간에 나오는 내용이다.왜 이렇게 글을 쓰냐면 이 책은 스터디 방법이 좀 달라야한다고 생각하기 때문이다.이 책을 한 번 읽고 완전히 이해하고 적용하는 사람은 없다고 생각한다.그냥 쭉 읽고 이해한 부분을 정리하고 적용할 수 있는 건 해보면 그걸로 충분한 것 같다.이해하지 못한 부분은 또 읽으면 되니까. 좀 더 레벨업하고 와서 보면 또 다르게 이해가 되는 것도 있겠지 하는 마음의 스터디 방법이다. (추천합니다.)각설하고 간단하게 정리하며 한 번 더 공부해본다.1. 지역 ..
spring-boot-starter-data-redis 사용기, get/set 예제와 pub/sub 예제 간단하게 만들고 테스트해봤습니다. spring boot에서 redis 사용하는 방법 지난 포스트 중 자바에서 redis(Jedis)를 사용한 포스트가 있었다.jedis 라이브러리를 직접 불러와서 사용했었지만 이번에는 spring boot에서 starter로 제공하는 라이브러리로 사용하는 것을 해봤다.이것 또한 jedis를 사용하는 것과 다르지 않다.spring에서 redis와 관련한 라이브러리를 추상화시켜서 사용할 수 있게 해준 것이다.무슨말이냐면 자바에서 주로 사용하는 redis 라이브러리로는 jedis와 lettuce가 있다.두 라이브러리를 공통으로 추상화해서 둘 중에 어떤 것을 쓸 것인지는 설정을 통해 사용할 수 있게 하는 것이다.바로 사용해본다.Get, Set Redis는 In Memory key/value Database로 No..
New로 생성한 Instance에서 Bean이 필요할 때 @Autowired 대신 Bean 주입 받는 방법(Spring boot에서 ApplicationContext를 가져와서 넣어버리기) Spring boot에서 Bean 주입 받기 일반적으로 많이 사용하는 WebApplication을 개발하다보면 자연스럽게 @Repository, @Service, @Controller, @Component, ...등을 이용해서 bean으로 등록하고 Bean으로 등록되는 클래스에서 @Autowired로 주입받아 사용하곤 한다. 그런데 스프링으로 애플리케이션을 개발하다보면 Bean이 아닌 클래스에서 Bean을 주입받을 필요가 있을 때가 있다.static 메서드에서 필요하든지 new로 생성한 인스턴스에서 Bean을 참조해야한다든지 하는 경우다.이럴 때 스프링을 기초부터 배웠다면 쉽게 해결할 수 있다.@Autowired 애노테이션 자체가 spring IoC Container(ApplicationContext)에..
자바 Comparable, Comparator 하면 '정렬'을 떠올려라, 자바 객체 정렬의 '기준'을 정하는 방법! (비교랑 다릅니다!) Java Comparable, Comparator Comparable, Comparator 가 무엇인지 알아보기 전에 확실히 해야할 것이 있다.Comparable, Comparator하면 '정렬'을 떠올려야하는 것이다.Compare 하면 "비교"고 Comparable하면 "비교 가능한" 이렇게 해석할 수 있기 때문에 "비교"가 먼저 떠오를텐데 이것을 가지고 같다 혹은 크다, 작다를 구분하는 단순 비교를 할 수 있는 것은 아니다.명확하게는 "정렬할 때 비교가 가능하다.", "정렬할 때 기준을 정할 수 있다." 가 맞다.단어적인 측면에서 보았을 때 오해할 수 있는 것을 알아봤다면, Comparable과 Comparator가 언제 어떻게 쓰는지 알아보면 좋을 것이다.우선 자바에서 객체를 정렬할 때 일정한 기준..
자바 equals(), hashCode(), == 연산자 비교 및 개념 정리하기(객체 비교 구문 커스터마이징하는 방법) 자바에서 각각 객체가 동일한지 확인하는 방법 자바 프로그래밍에서 객체가 동일한지 확인하는 분기문은 상당히 많이 작성할 것이다.예를 들면 '==' 연산자로 비교할 수도 있고 'equals()', 'hashCode()' 로 비교할 수도 있다.이제 앞에서 언급한 3개의 방법의 원리를 정리하고 적용해본다.== 연산자 == 연산자는 피연산자가 primitive type(int, double, boolean, ...)일 때는 값이 같은지 비교하고, 피연산자가 그 외 객체, reference type일 때 가리키는 주소가 같은지를 검사한다.12345678String str1 = "hello";String str2 = "hello";System.out.println(str1 == str2);//trueString st..
Spring AOP 스프링이 해줄건데 너가 왜 어려워 해? Spring boot에서 aop logging 사용법 제일 쉽게 알려드립니다! Spring AOP (Aspect Oriented Programming) - AOP는 관점 지향 프로그래밍으로 "기능을 핵심 비즈니스 기능과 공통 기능으로 '구분'하고, 공통 기능을 개발자의 코드 밖에서 필요한 시점에 적용하는 프로그래밍 방법"이다.위의 한 줄만 기억하면 된다.초보에게 Aspect, Advice, Pointcut, Weaving, Joinpoint, ... 이런거는 AOP를 이해하는데 방해하는 요소일 뿐이다. 추후에 AOP에 대해서 활용하고 싶고 깊이있게 이해하고 싶을 때 위에 나열한 것들에 대해서 공부해본다.스프링부트에서 초간단 AOP 적용하는 법 3단계1. spring-boot-starter-aop dependency 적용하기라이브러리는 있어야지.1234 org.springframew..
3가지만 기억하자. 스프링 부트 초간단 캐시 @EnableCaching, @Cacheable, @CacheEvict (spring boot cache example) 스프링 부트 캐시 적용하는 가장 쉬운 방법 스프링 부트에 캐시를 적용하고 싶으면 3가지만 기억하면 된다.@EnableCaching, @Cacheable, @CacheEvict1. "spring-boot-starter-cache" 라이브러리 불러온다.1234 org.springframework.boot spring-boot-starter-cacheColored by Color Scripter 2. 캐시 기능을 사용하고 싶은 프로젝트에 @EnableCaching을 쓴다.1234567@EnableCaching@SpringBootApplicationpublic class DemoApplication { public static void main(String[] args) { SpringApplication.ru..