본문 바로가기

전체보기

(243)
자바 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..
Null Pointer Exception으로 고통 받았다면 Java Optional을 사용해보세요(더 쉽고 깔끔하게 처리할 거에요) Java8 Optional 자바8이 나온지도 3년이 되었고 오라클 JDK의 LTS 버전인 자바11도 나왔는데 웬 자바8의 기능을 소개하냐! 하는 분도 있겠지만, 이제서야 자바8을 도입하는 회사들도 많이 있고 제 공부를 위한 것이니 즐겁게 사용해봅시다. Optional은 Null Pointer Exception(이하 NPE) 처리를 돕는 Wrapper Class다. 보통 자바 개발을 하면서 당연하게 객체(Object)를 만들어 사용한다. 그런데 C,C++에서 사용하던 포인터를 감췄다는 자바에서도 객체에는 포인터를 사용한다. (reference) 그렇기 때문에 모든 객체는 NPE에 대한 검사가 필요하고 방지하는 코드도 필요하다. 1 2 List list = getList(); List listOpt = li..
메이븐(Maven)은 알고 스프링(Spring)을 쓰는가? (pom.xml 분석하며 가볍게 정리하는 빌드 툴, Maven) 메이븐(Maven)은 알고 스프링(Spring)을 쓰는가? 제목과 같은 질문에 필자는 제대로 답변할 수 없었다.단순하게는 maven repository에서 dependency 추가해서 필요한 라이브러리 쓰는 정도?무엇을 위해 쓰는지, 왜 쓰는지, 어떻게 쓰는지에 대한 구체적으로 알지 못했다. 사실 지금까지 알 필요도 없었고, 초보 프로그래머의 기준에서는 Maven을 몰라도 대중적이면서도 다양한 라이브러리를 많이 접하고 써보면 "장땡"이었기 때문이었다.사실 지금도 자세히는 모른다.그러나, 조금 더 나은 프로그래머가 되기 위해서 maven에 대한 이해가 필요하다고 생각해서 정리한 것이다. ("maven을 빠삭하게 알아야 해!"가 아니라 "maven을 알아가는 길에 한 발자국을 떼보자!"다.)pom.xml을 ..
Spring boot Bean 생성 순서 정하는 방법, 생성되지 않은 Bean을 주입받으려고 하다가 실패했을 때 해결 방법, IoC 컨테이너를 공부해야하는 이유.. (※생명 주기 아님) Spring boot에서 bean 등록 순서를 결정하는 방법 스프링/스프링부트에서 bean을 등록하는 방법은 여러가지가 있다.스프링부트에서는 Bean을 등록할 때 자바코드(Annotation)로 등록하는 것을 권장한다.따라서 스프링 부트를 사용하는 개발자들은 @Component, @Service, @Controller, @Repository, @Bean, @Configuration 등으로 Bean들을 등록하고 주입받아 사용하는게 일반적이다.그런데 프로그램 개발중에 아무 생각없이 여러 개의 Bean들을 등록해놓고 어떤 Bean에서 @Autowired로 자연스럽게 주입받아서 '사용'하려다가 에러를 만났다.바로 Bean에 '아직' 등록되지 않은 Bean을 클래스에서 사용하려고 했기 때문이다.무슨 얘기인지 Sp..
자바 파일 변경 감지, 와치서비스를 이용한 파일 변경 알림 받기(WatchService, WatchKey) Java File Change Notification, Monitoring, WatchService 0. 긴~~ 사족다양하게 키워드를 준비해봤다.업무에서 Application Runtime중에 어떤 파일의 데이터(meta-data, properties 등...)가 변경되면 이벤트를 받아 다시 데이터를 메모리로 적재하는(reload) 기능이 필요했다.이 기능은 꽤나 광범위하게 쓰이고 있다.eclipse, IntelliJ 같은 IDE에서 파일이 변경되면 즉시 변경된 파일에 (*)별 표시가 뜨는 것과 Spring 같은 경우는 devtools를 dependency로 추가하면 파일이 변경될 때마다 서비스를 재시작해주는 기능등이 있다.또한 설정 값(Properties) 변경을 알려주는 기능은 그냥봐도 너무 많다.a..
자바 스트림(Stream) API 정리, 스트림을 이용한 가독성 좋은 코드 만들기(feat. 자바 람다, 함수형 프로그래밍, 자바8) Java Stream 자바 공부를 하면서 Stream이 무엇인지, 어떻게 사용되고 있는지 인지는 하고 있었으나 실제 코드로 타이핑해보지 않았다.그러던 중 이번에 가볍게 API 훑어보는 식으로 공부를 하면서 코드를 쳐보면서 조금 더 익히게 되었다.Stream은 자바 8부터 추가된 기능으로 "컬렉션, 배열등의 저장 요소를 하나씩 참조하며 함수형 인터페이스(람다식)를 적용하며 반복적으로 처리할 수 있도록 해주는 기능"이다. (InputStream, OutputStream같은 I/O Stream이 아니다.)1234567891011121314List names = Arrays.asList("jeong", "pro", "jdk", "java");// 기존의 코딩 방식long count = 0;for (String ..