전통적인 for문 각 경우에 따라 스트림이 제격인 작업이 있고 반복이 제격인 작업이 있다. 컬렉션 순회하기 - 더 나은 방법 package com.java.effective.item58; public class Main { public static void main(String[] args) { for (Iterator i = c.iterator(); i.hasNext();) { element e = i.next(); ... // e 로 무언가를 한다. } } } 배열 순회하기 package com.java.effective.item58; public class Main { public static void main(String[] args) { for (int i = 0; i < a.length; i+..
Read more지역변수의 유효범위 지역 변수의 유효 범위를 최소로 줄이면 코드 가득성과 유지보수성이 높아지고 오류 가능성은 낮아진다. 자바에서는 문장을 선언할 수 있는 어느 곳이면 어디서든 변수를 선언할 수 있다. 지역변수의 범위를 줄이는 가장 강력한 방법은 '가장 처음 쓰일때 선언하기'다. 미리 선언부터 해두면 코드가 어수선해진다. 변수를 실제로 사용하는 시점엔 타입과 초깃값이 기억나지 않을 수도 있다. 지역변수의 범위는 선언된 지점부터 그 지점을 포함한 블록이 끝날 때 까지다. package com.java.effective.item57; public class Main { public static void main(String[] args) { int test = 1; /* 블록이 끝날때까지 유효 */ } } 거..
Read more로드밸런서 (Load Balancer) 로드밸런싱(Load Balancing) 기술을 제공하는 서비스 또는 컴퓨터 네트워크 기술의 일종이다. 클라이언트와 서버 또는 네트워크 허브 사이에 위치한다. Client [Load Balancer] Server 즉, 위의 표와같이, 클라이언트로부터의 여러 요청들로 인해 서버에 가해지는 부하를 분산시켜주는 장치다. 네트워크 로드밸런서를 알기 전, '스위치'에 대한 개념부터 알아보자. 스위치 스위치는 데이터 링크 계층에서 동작하는 '스위칭 허브'라고도 부른다. 스위치 내부에 있는 MAC 주소 테이블(MAC address table)가 스위치의 포트 번호와 해당 포트에 연결되어 있는 컴퓨터의 MAC 주소를 저장하고있어, 브리지 테이블(bridge table)이라고도 한다..
Read moreJavadoc 자바독 16가지 설명 자바독은 소스코드 파일에서 문서화 주석(doc comment; 자바독 주석)이라는 특수한 형태로 기술된 설명을 추려 API 문서로 변환해준다. 문서화 주석을 작성하는 규칙은 공식 언어 명세에 속하진 않지만 자바 프로그래머라면 알아야하는 업계 표준 API다. 아래의 유의점을 보자. 1) 개발한 API를 올바르게 문서화하려면 공개된 모든 클래스, 인터페이스, 메서드, 필드 선언에 문서화 주석을 달아야한다. 직렬화할 수 있는 클래스라면 적렬화 형태에 관해서도 적어야한다. 문서화 주석이 없다면 자바독도 그저 공개 API 요소들의 '선언'만 나열해주는 게 전부다. 문서가 잘 갖춰지지않은 API는 쓰기 헷갈려서 오류의 원인이 되기 쉽다. 2) 메서드용 문서화 주석에는 해당 메서드..
Read more빈 값 처리방법 Optioanl 자바 8 전에는 메서드가 특정 조건에서 값을 반환할 수 없을때 취할 수 있는 선택지는 두가지였다. 1) 예외를 던진다. 2) null 을 반환한다. (반환 타입이 객체 참조일 경우) 두 가지 방법 모두 허점이 있다. 예외는 진짜 예외적인 상황에서 사용해야한다. null을 반환하면 클라이언트에서 별도의 null 처리 코드를 추가해야한다. 자바 8 후에 한가지 방법이 생겼다. 3) Optional 로 처리한다. 3)번의 방법은 null 이 아닌 T 타입 참조를 하나 담거나, 혹은 아무것도 담지 않을 수 있다. 아무것도 담지 않은 옵셔널은 '비었다'라고 말한다. Optional은 원소를 최대 1개 가질 수 있는 '불변' 컬렉션이다. Optional 가 Collection를 구현..
Read more문제 https://leetcode.com/problems/group-anagrams/ Group Anagrams - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 풀이코드 package SITE03_leetcode.medium; import java.util.*; import java.util.stream.Collectors; /** * https://leetcode.com/problems/group-anagrams/ */ public class M023_le..
Read morenull 처리 package com.java.effective.item54; import java.util.ArrayList; import java.util.List; public class Main { private final static List cheesesInStock = new ArrayList(); /** * 재고가 없다면 null 반환 * @return */ public static List getCheeses() { return cheesesInStock.isEmpty() ? null : new ArrayList(cheesesInStock); } public static void main(String[] args) { } enum Cheese { STILTON } } 재고가 없다면 null..
Read more가변인수 메서드 가변인수(varags) 메서드는 명시한 타입의 인수를 0개 이상 받을 수 있다. * 가변 인수 메서드 호출 과정 1) 먼저 인수의 개수와 길이가 같은 배열을 만든다. 2) 만들어진 인수들을 이 배열에 저장한다. 3) 배열을 가변 인수 메서드에 건네준다. 가변인수 예제코드 package com.java.effective.item53; import java.util.Arrays; public class Main { public static void main(String[] args) { System.out.println(sum(1, 2, 3)); } static int sum(int... args) { return Arrays.stream(args).sum(); } } 인수가 1개 이상이어야..
Read more문제 https://leetcode.com/problems/find-first-and-last-position-of-element-in-sorted-array/ Find First and Last Position of Element in Sorted Array - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 풀이코드 package SITE03_leetcode.medium; import java.util.Arrays; import java.util.stream...
Read more다중정의 package com.java.effective.item52; import java.math.BigInteger; import java.util.*; public class CollectionClassifier { public static String classify(Set s) { return "집합"; } public static String classify(List lst) { return "리스트"; } public static String classify(Collection c) { return "그 외"; } public static void main(String[] args) { Collection[] collections = { new HashSet(), new ArrayList(..
Read more메서드 시그니처 설계 1) 메서드 이름을 신중히 짓자. 항상 표준 명명 규칙을 따라야한다. 이해할 수 있고, 같은 패키지에 속한 다른 이름들과 일관되게 짓는게 최우선 목표다. 긴 이름은 피하고, 애매하면 자바 라이브러리의 API 가이드를 참조하자. 2) 편의 메서드를 너무 많이 만들지 말자. 모든 메서드는 각자 자신의 소임을 다해야한다. 메서드가 너무 많은 클래스는 익히고, 사용하고, 문서화하고, 테스트하고, 유지보수하기 어렵다. 클래스나 인터페이스는 자신의 각 기능을 완벽히 수행하는 메서드로 제공해야한다. 3) 매개변수 목록은 짧게 유지하자. 매개변수가 4개 이상 넘어가면 이를 기억하기가 쉽지 않다. 같은 타입의 애개변수 여러개가 연달아 나오는 경우는 더 해롭다. 사용자가 매개변수 순서를 기억하기 어려..
Read more불변식 깨뜨리기 자바는 메모리 충돌 오류에서 안전한 언어다. 자바로 작성한 클래스는 시스템의 다른 부분에서 무슨 짓을 하든 그 불변식이 지켜진다. 하지만 아무리 자바라고 해도 다른 클래스로부터의 침범을 아무런 노력없이 다 막을 수 있는건 아니므로 방어적으로 프로그래밍해야 한다. 어떤 객체든 그 객체의 허락 없이는 외부에서 내부를 수정하는 일은 불가능하다. 하지만 실수로 내부를 수정하도록 허락하는 경우가 생긴다. Period.java package com.java.effective.item50; import java.util.Date; public class Period { private final Date start; private final Date end; public Period(Date start..
Read more문제 https://leetcode.com/problems/next-permutation/ Next Permutation - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 풀이코드 package SITE03_leetcode.medium; import java.util.Arrays; /** * https://leetcode.com/problems/multiply-strings/ */ public class M021_leetcode31_NextPermutation ..
Read more메서드 매개변수 검사 메서드와 생성자 대부분은 입력 매개변수의 값에 제약이 있다. 예를 들어, 음수이면 안되고, 객체 참조는 null이 아니여야한다는 식이다. 이런 제약은 반드시 문서화해야 하며, 메서드 몸체가 시작되기 전에 검사해야한다. 이는 "오류는 가능한 한 빨리 잡아야 한다"는 일반 원칙의 한 사례다. 오류를 발생한 즉시 잡지 못하면 해당 오류를 감지하기 어려워지고, 감지하더라도 오류의 발생 지점을 찾기 어려워진다. 메서드 몸체가 실행되기 전에 매개변수를 확인한다면 잘못된 값이 넘어왔을때 즉각적이고 깔끔한 방식으로 예외를 던질 수 있다. 매개변수 검사를 제대로 하지 못하면 몇가지 문제가 생길 수 있다. 1) 메서드가 수행되는 중간에 모호한 예외를 던지며 실패할 수 있다. 2) 메서드가 잘못된 결과..
Read more신규 파일 생성 MemberController.java package com.api.westmall.controller; import com.api.westmall.common.CommonResponse; import com.api.westmall.form.MemberForm; import com.api.westmall.service.MemberService; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotatio..
Read more