나의 개발일지



· Java
들어가며 GDSC 모던 자바 인 액션 스터디 발표자료를 준비하기 위해 책을 읽어보던 도중, 책에서 Enum 비교를 위해 공통적으로 equals 메서드를 사용하는 것을 알게 되었습니다. Enum은 == 비교가 가능하며 이에 따른 이점이 존재하므로, 강의를 진행함에 있어서 책에서 제공하는 소스 코드와 다르게 진행하게 된 이유를 말씀드리고자 합니다. 우리는 String의 문자열 내용을 비교할 때는 String의 equals 메서드를 사용합니다. JLS, 15.21.3 Reference Equality Operators == and != 를 보면 해당 내용에 대한 설명이 잘 나와있습니다. (마지막 문단) == 는 String 유형의 참조를 비교하는데 쓰일 수 있지만, 이러한 동등성 테스트는 두 피연산자가 동일한..
· Java
클래스 정의하는 방법 JLS 8.1 Class Declarations 클래스 선언은 명명된 새 참조 유형을 지정합니다. 클래스 선언에는 일반 클래스 선언과 열거형 선언(enum declarations)의 두 가지 종류가 있습니다. 이 섹션의 규칙은 enum 선언을 포함한 모든 클래스 선언에 적용됩니다. 그러나 class modifiers, inner class, supper class와 관련된 열거형 선언(enum declaration)에는 특별한 규칙이 적용됩니다. 이러한 규칙은 JLS 8.9 를 참고하세요. 클래스 선언의 TypeIdentifier는 클래스의 이름을 지정합니다. 클래스가 둘러싸는 클래스 또는 인터페이스와 동일한 simple name을 갖는 경우 컴파일 타임 오류입니다. 클래스에서 사용..
SOLID 클린코드로 유명한 로버트 마틴이 좋은 객체지향 설계의 5가지 원칙을 정리 SRP : 단일 책임 원칙 (Single responsibility principle) OCP : 개방-폐쇄 원칙 (Open/closed principle) LSP : 리스코프 치환 원칙 (Liskov substitution principle) ISP : 인터페이스 분리 원칙 (Interface segregation principle) DIP : 의존관계 역전 원칙 (Dependency inversion principle) SRP 단일 책임 원칙 Single responsibility principle 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것은 모호하다. 클 수 있고, 작을 수 있다. 문맥과 상황에 ..
· Java
static 예약어가 붙으면 JVM이 시작될 때 Method(static) 영역에 저장됩니다. 그리고 프로그램이 끝날 때까지 사라지지 않고 메모리에 남아있습니다.(Java 기준) 따라서 GC의 대상이 아닙니다. 라고 알고 있었는데, 공식 문서나 블로그를 찾아보면 static이 heap 영역으로 할당된다는 말이 있어 혼란스러웠습니다. 우선, 근본적인 고민은 다음과 같은 리뷰어님의 리뷰에서 시작되었습니다. 다른 곳에서 RaceGameController.printResultHeader(); 와 같은 방식으로 호출하지 않기 때문에 static을 지우고 커밋했습니다. 그 후 객체지향 설계와 클린 코드의 관점에서 봤을 때 static 예약어의 사용은 좋을까? static으로 선언하면 GC의 대상이 될까? 라는 의문..
· Java/Java 8
n 이하의 자연수를 소수와 비소수로 분류하는 예제를 커스텀 컬렉터를 통해서 성능을 개선해보겠습니다. 널리 알려진 방법인 에라토스테네스의 체와 partitioningBy를 이용해서 다음과 같이 분류할 수 있습니다. public class PartitionPrimeNumbers { public static void main(String[] args) { Map partitionPrimeList = partitionPrimes(10); System.out.println(partitionPrimeList); } public static boolean isPrime(int candidate) { int candidateRoot = (int)Math.sqrt(candidate); // 에라토스테네스의 체 retur..
· Java/Java 8
Stream처럼 사용하기 Optional을 제대로 사용하려면, Optional을 최대 1개의 원소를 가지고 있는 특별한 Stream이라고 생각하면 좋습니다. Optional 클래스와 Stream 클래스 간에 직접적인 구현이나 상속관계는 없지만 사용 방법이 매우 유사하기 때문입니다. Stream 클래스가 가지고 있는 map()이나 flatMap(), filter()와 같은 메서드를 Optional도 가지고 있습니다. map() 사용하기 Stream API를 다루듯이 Optional API를 사용하여 getCityOfMemberFromOrder() 메서드를 리팩토링 해보겠습니다. 메서드 체이닝의 각 단계 별로 자세히 살펴보겠습니다. ofNullable() 정적 팩토리 메서드를 호출하여 Order 객체를 Op..
· Java/Java 8
이전 글을 통해 Java8 이전에는 얼마나 null 처리가 힘들었는지 살펴보았습니다. null 관련 문제 돌아보기 런타임에 NPE(NullPointerException)라는 예외를 발생시킬 수 있습니다. NPE 방어를 위해서 들어간 null 체크 로직 때문에 코드 가독성과 유지 보수성이 떨어집니다. Java8은 이러한 함수형 언어의 접근 방식에서 영감을 받아 java.utll.Optional 라는 새로운 클래스를 도입하였습니다. Optional이란? Optional은 존재할 수도 있지만 안 할 수도 있는 객체. 즉 null이 될 수 있는 객체를 감싸고 있는 일종의 래퍼 클래스입니다. 원소가 없거나 최대 하나 밖에 없는 Collection이나 Stream으로 생각해도 좋습니다. 직접 다루기에 위험하고 까다..
· Java/Java 8
이 글에서는 Java8 Optional에 대해서 알아보도록 하겠습니다. NPE(NullPointerException) null 참조로 인해 자바 개발자들이 가장 골치아프게 겪는 문제는 널 포인터 예외(NPE)일 것입니다. 런타임 때 발생하는 NPE의 스택 트레이스에 개발자들은 많은 스트레스를 받아왔습니다. java.lang.NullPointerException at seo.dale.java.practice(OptionalTest.java:26) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at ..
· Java
스프링으로 개발을 할 때, 우리는 기본적으로 Service과 Repository 라는 컴포넌트를 만들고 Service에 @Autowired 라는 어노테이션을 통해 Repository를 주입시킵니다. 이러한 과정을 DI(Dependency Injection) 즉, 의존성 주입이라고 합니다. 다음과 같은 테스트 클래스를 작성해 확인해봅시다. package com.example.demo; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.c..
· Java
이 글에서는 Dynamic Web Page를 만들 때 사용되는 자바 기반의 웹 애플리케이션 기술인 서블릿에 대해 알아봅니다. 서블릿을 활용하면 웹 요청과 응답의 흐름을 간단한 메서드 호출만으로 체계적으로 다룰 수 있습니다. 1. 서블릿을 사용하기 전 서블릿을 사용하기 전에는, 개발자가 다음과 같이 직접 웹 어플리케이션 서버를 구현해야 합니다. 2. 서블릿을 지원하는 WAS를 사용할 때 서블릿은 애플리케이션 로직만 구현하면 된다는 특징을 가지고 있습니다. 3. 서블릿 HTTP 요청, 응답 흐름 urlPatterns(/hello)의 URL이 호출되면 서블릿 코드가 실행됩니다. HTTP 요청 정보를 편리하게 사용할 수 있는 HttpServletRequest, HTTP 응답 정보를 편리하게 제공할 수 있는 Ht..
?name=euichan
'Java' 카테고리의 글 목록