목록java (18)
잡동사니
안녕하세요. yeTi입니다. 오늘은 백기선님의 강의 중 자바의 열거 타입를 보다가 받은 숙제인 HashMap, HashSet과 EnumMap, EnumSet과의 차이점 확인해보고자 합니다. EnumSet의 구조 EnumSet 은 내부적으로 bit vector를 사용하기 때문에 메모리 효율이나 성능면에서 뛰어나고 64bit를 넘어가는 경우도 대응할 수 있습니다. 다만 thread-safe 하지 않기 때문에 multi-thread 환경에서 사용하려면 Collections.synchronizedSet() 을 사용하여야 합니다. 따라서 Bit 필드 사용해야될 경우 EnumSet 을 사용하면 효율이나 성능측면에서 득이 됩니다. public class Text { public enum Style { BOLD, IT..
안녕하세요. yeTi입니다. 오늘은 Java 의 Enum 을 지역 변수처럼 사용하려고 시도하면서 겪은 현상을 공유하고자 합니다. 현상 다음 테스트 코드와 같이 enum 을 여러 곳에서 지역 변수로 할당받아 Enum의 내부 변수(message)를 변경하는 작업을 수행했더니 의도와는 다르게 message 의 값이 이전 값을 계속 유지하는 버그가 나타났습니다. class EnumTest { @Test void constructor() { EnumType responseType1 = EnumType.INTERNAL_SERVER_ERROR; responseType1.changeMessage("yeti"); EnumType responseType2 = EnumType.INTERNAL_SERVER_ERROR; res..
안녕하세요. yeTi입니다. 오늘은 백기선님의 유튜브 강좌 중 하나인 이팩티브 자바 의 완주 후기를 공유하려고 합니다. 강의 수강 계기 지난 후기 이후로 요즘 너무 기초 강좌만 보고 있나 라는 생각이 들면서, 좀 더 발전적인 다른 무언가를 해야겠다는 생각을 막연하게 가지고 있었습니다. 그러던 차에 백기선님의 지금까지 만들었던 강의들은 결국 이 강의를 만들기 위한 준비 작업이었습니다. 라는 영상이 이목을 끌었고, 궁극의 강의의 주제는 무엇일까? 라는 궁금증으로 바로 영상을 보게 되었네요. 영상에서 이펙티브 자바 Effective Java 3/E - YES24 는 모든 자바개발자에게 권장하는 필독서중 하나 이지만 모든 개발자가 소화하기는 힘든 어려운 책 이라고 하는데요. 그래서 이펙티브 자바를 주제로 강의를..
안녕하세요. yeTi입니다. 오늘은 Spring Framework으로 http request를 처리할때 request string을 enum으로 바인딩하는 방법을 보면서 Spring에서 제공하는 바인딩 서비스들을 확인해보겠습니다. 이전에 작성한 스프링 추전 강좌, 스프링 프레임워크 핵심 기술 내용 정리 및 후기 에도 관련 내용이 있습니다. Converter 활용 Spring 에서는 모델을 바인딩하기 위해 Converter interface를 제공합니다. 그리고 http request가 들어오면 각 컨트롤러들은 BindingInitializer에 등록된 converter 들을 가지고 string 을 모델로 변환해줍니다. 이를 활용하여 http get 요청시 Path variable와 Request para..
안녕하세요. yeTi입니다. 오늘은 Java 입문 수업 (생활코딩) 을 완주한 후기를 기록하려고 합니다. 강의 수강 계기 9년넘게 자바라는 언어를 다루며 개발자라는 직업을 가져오고 있는데요. 그럼에도 자바를 잘하는가? 자바에 대해서 많이 아는가? 라는 질문에 감히 그렇다라는 대답을 할 수 없었습니다. 그래서 기회가 되면 기초 수업이라도 지속적으로 들으며 놓치고 있는 부분이 있진 않는지 점검을 하려고 합니다. 이번 생활코딩의 자바 입문 수업도 기초적인것을 놓치고 있는것이 있진 않는지 확인차 강의를 듣게 됐습니다. 배운점 객체 지향 프로그래밍 객체 지행 프로그래밍은 절차 지향 프로그래밍의 믄제를 해결하기 위해 나온 개념중 하나이다. 절차 지향 프로그래밍의 규모가 커질수록 유지보수하기가 힘들어졌고, 이를 해결..
안녕하세요. yeTi입니다. 오늘은 Spring MVC를 공부하기전에 서블릿을 공부하는 시간을 가져보고자 합니다. 서블릿 이전에는 CGI (Common Gateway Interface)를 사용했는데 요청이 있을 때마다 새로운 프로세스가 생성되어 응답처리가 무겁다는 단점이 있었습니다. 이를 Servlet이라는 클래스를 만듬으로써 자바 개발자들이 보다 쉽게 웹 어플리케이션을 만들 수 있도록 합니다. 이 문서는 Java™ Servlet Specification - Version 3.1을 참고하여 작성했습니다. 개념간의 관계를 그린 개념도 입니다. Servlet : 서블릿 구동 Filter : 요청 필터링 Servlet Context : 서블릿간 정보공유 Servlet Container : 서블릿 관리자 ▲▲▲..
안녕하세요. yeTi입니다. 오늘은 java에서 볼 수 있는 NullPointerExceptions을 예방하는 방법에 대해 알아보고자 합니다. 개요 Java를 개발하다보면 NullPointerExceptions을 어렵지 않게 만날 수 있는데요. 어떤 스타일로 개발을 하면 NullPointerExceptions을 피해갈 수 있을지에 대해 고민해보고 내용을 공유하고자 합니다. 문제인식 Java에서 Null을 언제쓰는지 생각을 해보면 클래스가 초기화되지 않았거나, 인스턴스가 존재하지 않는다는 의미를 표현하고 싶을 때 사용합니다. 간단한 해결법은 클래스를 원하는 시점에 초기화하고 인스턴스가 없다는것을 인지하고 로직을 구현하면 되는데요. 여기서 사용하기 곤란한 코드가 발생합니다. 바로 다음과 같은 코드입니다. S..
안녕하세요. yeTi입니다. 오늘은 자바에서 사용하는 Stream의 근간이 되는 Aggregate Operations에 대해 알아보겠습니다. 개요 Collection은 주로 데이터를 검색할 때 사용합니다. 이 때, 자바에서는 aggregate operations 을 지원하여 보다 간결하게 코드를 작성할 수 있도록 해주는데요. 흔히 collection에서 stream()을 사용하여 데이터를 검색하는 것이 aggregate operations 을 사용하는 것으로 보면됩니다. Pipelines and Streams Aggregate operations 에서 수행 순서를 정의하는 것을 pipeline이라고 하는데요. pipeline은 source와 intermediate operations, terminal o..
안녕하세요. yeTi입니다. 오늘은 자바에서 람다식을 사용하는 방법에 대해 공유하고자 합니다. 제가 처음 Oracle Java Documentation내 Lambda Expressions을 읽은 이유는 단순히 자바에서 사용하는 람다의 표현식에 대해서 알고자 함이었습니다. 하지만 documentation 에서 제공하는 시나리오를 읽으면서 단순히 function 을 파라메터로 전달하는 형식에 그치는 것이 아니라 function 을 파라메터로 전달하는 형식에 의해 얻을 수 있는 인터페이스의 변화나 확장성에 대해 인지할 수 있는 시간이었기 때문에 해당 내용을 공유하게 됐습니다. 개요 자바에서는 interface (하나의 추상 함수를 가지는)와 anonymous classes (익명 클래스)를 활용하여 로직을 함..
안녕하세요. yeTi입니다. 오늘은 Java를 공부하는 범위에 대해 알아보려고 합니다. 개요 자바를 공부하는 방법에는 다양한 방법이 있고, 공부하는 방법에 따라 강조하는 부분이 다를 수 있습니다. 따라서 어느정도 공부를 해야 자바를 잘 안다고 할 수 있을지에 대한 개인적인 생각을 공유하고자 합니다. 우리가 접하는 대부분의 제품에는 설명서가 있습니다. 마찬가지로, 프로그래밍 언어나 오픈소스에도 Document라는 형태로 개념이나 spec에 대해 설명을 하고 있습니다. 따라서 자바를 공부함에 있어서 해당 진영에서 제공하는 document를 기반으로 지식을 얻는다는 것은 의미가 있다고 생각합니다. 이에 오라클에서 제공하는 학습 가이드를 기반으로 Java를 공부하는 범위를 보고자 합니다. Guide for be..