java
-
람다 정리 및 예시java 2021. 5. 19. 21:10
배경 고전적인 반복만 사용하던 옛날에 비해 최근에는 람다와 스트림으로 코드를 작성한다. 이제 눈에도 훨씬 잘 익고 오히려 단순 for문이 보기 어려울 정도가 되었다. 손과 눈에 익숙한 람다와 스트림에 대해 최근에 직격타를 맞았다. 내가 잘 알고 있는지에 대해 확인하는 시간이 있었고 난 그저 사용만 하고 있었다는 걸 알았다. 매번 써보고 공부하고 제대로 쓰자라는 나름대로 철학을 갖고 공부하지만 항상 그러지는 못하는 것 같다 ㅠㅠ. 특별히 람다와 스트림은 이전 나에 대한 속죄포 느낌으로 A부터 Z까지 공부하자! - 자바의 정석을 보며 공부하는 내용 람다식 람다식은 메서드를 반환형과 네임을 제외한 익명함수로 부를 수 있다. 정확히 말하면 익명클레스이지만 특정 상황에서 마치 익명함수처럼 사용할 수 있는 기능이다..
-
Thread 정리java 2021. 5. 11. 15:55
배경 프로세스가 무엇인지 스레드가 무엇인지에 대한 내용은 여기서 다루지 않는다. 우선 java에서 스레드를 관리하기 위해 제공하는 객체가 무엇인지 확인하고 간단한 api사용법 및 스레드 상태에 대해 정리하도록 하자. 스레드 실행 스레드를 실행하기 위해서는 Thread.start()를 수행해야 한다. start는 내부적으로 run()을 호출하게 되는데 run()을 정의하기 위한 방법으로 Thread객체를 상속하거나 Runnable인터페이스를 구현해 재정의한 run()을 콜백으로 넘겨주는 방법이 있다. 전형적인 템플릿콜백 패턴이다. 참고로 한 스레드 당 한 번만 start()를 호출할 수 있다. 스레드는 스레드만의 독립적인 메모리 영역을 갖고 있고 고유한 이름이 있다. 따라서 Thread의 static메서드..
-
애너테이션 정리java 2021. 5. 11. 14:26
표준 애너테이션과 메타 애너테이션 표준 애너테이션 - @Override : 오버라이딩된 메서드임을 명시하여 컴파일러가 해당 클래스의 부모 메서드를 찾아 동일한 메서드 확인 - @Deprecated : 기능적으로 아무 의미 없으며 곧 사라질 것임을 사용자에게 알림 - @SuppressWarnings : 경고메세지를 없애도록 약속 - @FunctionalInterface : 함수형 인터페이스임을 알림 - @Native : native메서드에서 참조되는 상수 앞에 붙인다. 메타 애너테이션 메타 애너테이션은 애너테이션을 위한 애너테이션이다. 애너테이션에서 주로 쓰이는 속성을 정할 때 사용한다. @Target 애너테이션을 적용할 수 있는 대상을 지정한다. 대표적으로 타입, 필드, 메서드, 애너테이션, 파라미터 등..
-
컬렉션 정리java 2021. 5. 10. 15:29
배경 사실 각 컬렉션의 특징 및 사용법은 익숙하다 못해 손이 먼저 반응한다. 다만, 하는 것과 아는 건 다르고 또 그걸 입 밖으로 말하는 건 다른 문제니 깔끔하게 정리하고자 한다. 각 컬렉션의 구체적인 특징이나 사용법보다는 java.util의 구조와 낯선 인터페이스 위주로 정리한다. ArrayList add() 배열의 크기를 동적으로 변경하는 건 불가능하다. 리스트에 객체를 추가했을 때 capacity를 초과한 경우 grow()를 호출해 기존 배열을 복사하고 capacity를 1 추가한 새로운 배열을 얻는다. 리스트 생성 시 capacity의 값을 초기화하지 않으면 기본으로 10의 capacity가 할당된다. 애플리케이션의 성능을 고려한다면 넉넉한 capacity로 리스트를 선언하는 게 좋다. remov..
-
Java Garbage Collectorjava 2021. 5. 10. 12:21
Overview www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html 위 글 번역하며 공부 Purpose Hotspot JVM과 GC가 상호작용하는 기본 원리를 공부한다. 일단 이 기본을 공부하고 GC를 모니터링하며 종류별 GC에 대해 공부하자. Java Technology and the JVM Java Overview Java Runtime Edition java를 다운로드 받으면 Java Runtime Envirnment(JRE)를 얻는다. JRE는 Java Vitual Machine(JVM), 코어클래스, 플렛폼 라이브러리로 구성되어 있다. 3가지 구성요소가 Java를 돌리는 데 반드시 필요하다. Java Programmin..
-
BeanUtils copyProperties 사용법 및 주의사항java 2021. 5. 4. 17:31
배경 DTO를 엔티티로 전환하는 작업 또는 엔티티를 DTO를 전환하는 작업은 흔하게 있다. 두 객체의 필드변수는 많이 닮아 있다. 대부분 공통필드를 갖고 몇몇이 추가되거나 삭제되어 있다. 이때 엔티티 또는 DTO의 필드변수 개수가 많아지면 굉장히 곤란했다. 곤란했다기보다 스트레스를 많이 받았다. 뻔한 코드를 수십줄 치고 있자니 굉장히 어려웠다. 문제는 변경에 있다. 전달해야할 필드가 변경된다면 일일이 찾아서 고쳐야 했다. 그러던 중 굉장한 스프링의 유틸을 발견했다... 사용법 굉장히 간단하다. 복사 소스는 Setter를 정의하고 타겟은 Getter를 정의하면 된다. 그리고 두 인스턴스를 전달하면 이름과 타입이 같은 필드를 getter와 setter를 이용해 복사한다. 복사를 원하지 않는 필드는 위처럼 필..
-
java 실행과정java 2021. 5. 1. 17:46
배경 운영체제 시간에 .c파일이 컴파일, 링크, 로드를 거쳐 실행되는 흐름을 배웠다. java를 본격적으로 공부하면서 대강 비슷하게 실행되겠거니 하고 자세한 내용은 공부를 미뤘다. 이제 면접을 준비해야 하니 자세하게 공부하자^^ JVM이란? JVM은 우리가 작성한 .java파일을 실행하기 위한 소프트웨어다. JVM 또한 하나의 소프트웨어이기 때문에 운영체제에 맞는 버전이 있다. 개발자는 정해진 java문법에 맞게 코드를 작성하고 이를 운영체제와 상호작용하여 프로그램을 실행시켜주는 건 JVM이 해주는 것이다! JVM 동작 과정(큰그림) - 문법에 맞는 .java파일을 작성한다 - Javac는 .java파일을 .class파일로 컴파일한다(텍스트를 바이트코드로 변환한다) - .class파일을 실행한다(.cla..
-
JWT를 이용한 인증java 2021. 4. 16. 13:42
배경 진행하는 프로젝트는 인증, 인가를 위해 Session-Cookie방식을 사용하고 있다. 인증 프로세스를 통과한 사용자에게 인증된 쿠키를 응답헤더에 포함하고 그 쿠키를 key값으로 사용자 정보를 세션 형태로 저장한다. 이후 인증된 사용자에게 제공하는 api서비스는 전부 쿠키의 key값에 대한 value가 있는지 확인함으로써 인증을 시도한다. 새로운 마이크로 서비스를 공부하면서 강의 내용은 인증 인가를 위해 JWT를 사용했다. 사실 JWT방식은 많이 들어보기도 했고 현대 아키텍처에서 자주 쓰인다고도 한다. 이번 기회에 명확하게 그 방법을 알아보자. Session-Cookie와 JWT의 차이점 두 방법 모두 HTTP의 stateless를 극복하기 위해 헤더에 값을 저장한다. 다만, Session-Cook..