JAVA
-
Java Optional의 사용JAVA/Java 2022. 1. 6. 19:37
런타임에 발생하는 객체없음(NullPointException)을 방지하기 위해서 java8 부터는 함수형 언어를 이용해서 존재하지 않을 수 도 있는 값이라는 Optional 타입을 만들어냈다. 그러나 Optional의 사용에는 주의해야 할 점 이 26가지나 존재하므로 유의해서 사용해야 한다. Optional Card card = cardRepository.findById(1).orElseThrow(new IllegalException("Card not found with id: " + 1)) Optional은 null이 될 수도 있는 값을 가진 객체를 감싸는 Wrapper 클래스 로 반환할 결과 값이 null(없음)임을 명백하게 표현할 필요가 있지만 null반환시에 에러가 발생할 가능성이 높은 곳에서 제..
-
자바에서 static의 사용JAVA/Java 2021. 12. 30. 21:18
프로젝트 리팩토링을 진행 중 자바에서의 static메서드를 가진 utility 클래스의 사용은 자제해야 한다는 코드 리뷰를 받게 되었다. 자바에서의 static의 사용 public class FileUploadUtils { //폴더에 사진을 저장 public static void saveFile(String uploadDir, String fileName, MultipartFile multipartFile) throws IOException { ... } //폴더에 파일이 이미 존재한다면 폴더 비워주기 public static void cleanDir(String dir) throws IOException { ... } //폴더 삭제하기 public static void deleteDir(String d..
-
Method Reference (Java 8)JAVA/Java 2021. 12. 19. 13:01
Method Reference 는 람다식을 더 간결하게 표현하기 위한 방법이다. Method Reference 메소드 레퍼런스에는 3가지 방법이 존재한다. 정적 메소드 참조 (Static Method Reference) 인스턴스 메서드 참조 (Instance Method Reference) 생성자 참조 (Contructor Reference) 정적 메소드 참조 List fruits = Arrays.asList("apple", "banana", "kiwi"); //람다식 표현 fruits.forEach(fruit -> StringUtils.capitalize(fruit)); //메소드 레퍼런스 표현 fruits.forEach(StringUtils::capitalize); //출력 결과 Apple Banan..
-
Refactoring ① : 첫번째 예제JAVA/Java 2021. 12. 17. 11:20
https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=339765 Refactoring 리팩토링은 소프트웨어의 외부 기능을 변경하지 않으면서 내부 구조를 바꾸는 기술이다. 리팩토링을 사용하면 나쁜 디자인의 코드를 취해서, 외부 기능을 변경하지 않고, 좋은 디자인의 코드로 www.aladin.co.kr 기존의 코드 public class Movie { public static final int CHILDRENS = 2; public static final int REGULAR = 0; public static final int NEW_RELEASE = 1; private String _title; private int _priceCode; public Movie(Str..
-
DTO와 VO 그리고 EntityJAVA/Java 2021. 12. 13. 17:31
계층간 데이터를 주고 받을 때, 소통하는 계층에 따라서 값을 전달하는 객체의 형태는 달라진다. DTO Data Transfer Object로서 계층간 데이터 교환을 위하여 사용하는 객체 이다. DB의 데이터를 Service나 Controller (즉, Presentation Layer)와 주고 받을 때 사용된다. Client와 바로 접해있는 View 계층에서는 정보가 자주 변경되기 때문에 변경이 이루어 질때마다 바로 DB와 연결된 Entity를 변경하고자 한다면 이와 의존관계에 놓인 많은 다른 클래스에도 영향을 미치기 때문에 영향받지 않고 자유롭게 변경 가능한 DTO를 사용하게 된다. 이는 로직을 가지고 있지 않은 순수한 데이터 객체 이며 getter / setter 메서드 만 을 가진다. Control..
-
Setter의 사용 금지JAVA/Java 2021. 12. 13. 16:57
프로젝트 진행중 엔티티나 DTO에 setter를 사용하게 되는 일이 종종 발생하게 되는데, 이는 일관성 유지에 어려움 등의 여러가지 문제점으로 인해 사용이 금지된다. ① Setter 사용의 의도를 알기 어려움 public ActivityCreateDTO saveActivity(ActivityCreateDTO activityCreateDTO) { Activity activity = new Activity(); activity.setName(activityCreateDTO.getName()); activity.setDescription(activityCreateDTO.getDescription()); activity.setScore(activityCreateDTO.getScore()); activityRep..
-
계층별, 기능별 패키지 구성JAVA/Java 2021. 12. 12. 17:45
프로젝트를 진행하다 보면 패키지를 어떻게 구성할 것인가에 고민이 생긴다. 프로젝트의 패키지 구성은 계층별, 기능별 구성으로 나눌 수 있다. 계층별 구성 자바 계층을 나누자면 web layer, service layer, repository layer로 나뉠 수 있다. ① Web Layer (Presentation Layer) : 컨트롤러와 뷰 템플릿 영역으로 외부 요청과 응답에 관한 영역 여기서 사용자에게 보여지는 영역과 정보를 주고 받기 위해서 DTO를 사용 한다. ② Service Layer (Business Layer) : 도메인모델과 요청의 적합성 검증 및 트랜잭션 관리 (비지니스 로직 구현 파트는 아니다) 상태와 행위를 갖는 Domain계층 에 메세지를 전달하는 역할을 수행한다. 프레젠테이션 영..
-
객체지향 생활 체조JAVA/Java 2021. 12. 12. 17:05
객체지향 생활 체조는 절차지향적인 생각에서 벗어나 객체지향 코드를 작성하기 위한 가이드 라인이다. 기존에 작성한 코드는 절차지향중심으로 작성된 부분이 매우 많았기에 공부하면서 수정하고자 한다. 객체지향 생활 체조 객체지향 생활 체조는 9가지의 지침으로 나뉜다. 1. 메서드 당 들여쓰기 한 번 유지 2. else 예약어 사용 금지 3. 모든 원시값과 문자열을 포장 4. 한 줄에 점을 하나만 찍기 5. 축약 금지(줄여쓰기 금지) 6. 모든 엔티티를 작게 유지 7. 2개 이상의 인스턴스 변수를 가진 클래스 사용 금지 8. 일급 컬렉션의 사용 9. getter / setter / property의 사용 금지 ① 메서드 당 들여쓰기 한 번 메서드의 응집력을 높이기 위해서 거대한 메소드를 사용하는 것을 지양한다. ..