본문 바로가기

All205

[이펙티브자바 3판] ITEM63. 문자열 연결은 느리니 주의하라 이번장의 핵심은... 성능에 신경 써야 한다면 많은 문자열을 연결할 때는 문자열 연결 연산자(+)를 피하자 String 대신 StringBuilder의 append()를 사용하자 String + String 문자열 연결 연산자(+)는 문자열을 하나로 합쳐주는 편리한 수단이다 작고 크기가 고정된 객체의 문자열 표현을 만들때라면 괜찮지만, 성능 저하가 올 수 있다 문자열 연결 연산자로 문자열 n개를 잇는 시간은 n 제곱에 비례한다 문자열은 불변이라서 두 문자열을 연결할 경우, 양쪽의 내용을 모두 복사해서 새로 문자열을 생성하므로 성능 저하는 피할 수 없는 결과다 * 문자열 연결을 잘못 사용한 경우 - 느리다.. 품목이 많을 수록 이 메서드는 심각하게 느려질 수 있다 public String statement.. 2020. 9. 5.
[이펙티브자바 3판] ITEM4. 인스턴스화를 막으려거든 private 생성자를 사용하라 이번장의 핵심은... 단순히 정적 메서드와 정적 필드만을 담을 클래스를 만들고 싶다면, 객체가 인스턴스화되는 것을 막기 위해서 priate 생성자를 추가하자 java.lang.Math, java.util.Arrays 기본 타입 값이나 배열 관련 메서드들을 모아놓음 java.util.Collections 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드 또는 팩터리를 모아 놓음 -> java8 부터 이런 메서드를 인터페이스에 넣을 수 있다 final 클래스 final 클래스를 상속해서 하위 클래스에 메서드를 넣는 건 불가능하기 때문에 final 클래스와 관련된 메서드들을 모아놓을 때도 사용 이렇게 정적 멤버만 담은 유틸리틔 클래스는 인스턴스로 생성하도록 설계하면 안된다 주의할점은 추상 클래스로 만드.. 2020. 9. 5.
[클린코드(CleanCode)] 2장. 의미있는 이름 의도를 분명히 밝혀라 변수, 함수 등에 좋은 이름을 지어주자 그릇된 정보를 피하라 나름 널리 쓰이는 의미가 있는 다른 단어를 다른 의미로 사용하거나,서로 흡사한 이름을 사용하지 마라 String accountList (x) String XYZTestHandleStrings (x) String XYZTestStorageStrings (x) 의미 있게 구분하라 변수이름을 a1,a2 (x) - source, destination 처럼 의미있는 이름으로 불용어를 쓰지말자 불용어 : 인터넷 검색 시 검색 용어로 사용하지 않는 단어. 관사, 전치사, 조사, 접속사 등은 검색 색인 단어로 의미가 없는 단어 Info, Data 또한 a, an, the처럼 의미가 불분명한 불용어 moneyAmount/money, cus.. 2020. 9. 4.
[Leetcode(릿코드)] 997. Find the Town Judge (Easy) URL) https://leetcode.com/problems/find-the-town-judge/ 문제) 마을에 1~N으로 라벨링된 N명의 사람들이 있는데, 한 소문으로 (비밀적으로) 1명이 마을의 판사다 만약, 마을의 판사가 존재한다면 1. 마을 판사는 아무도 신뢰하지 않는다 2. 모든 사람(판사는 제외)은 마을 판사를 신뢰 3.(1,2)를 만족하는 사람은 정확히 1명이다 trust[i] = [a,b] 주어지면 a가 b를 신뢰한다는 뜻이다 만약 마을 판사가 존재하고 신원을 확인할 수 있는 경우 마을 판사의 라벨을 반환하고, 그렇지 않으면 -1을 반환하라 해결) 이 문제는 그래프를 이용해 풀었다. 화살표는 신뢰도이다 (1->2) : 1이 2를 신뢰한다 한번 그림과 결과를 보면서 예를 들어보자. Inpu.. 2020. 9. 4.
[이펙티브자바 3판] ITEM3. private 생성자나 열거타입으로 싱글턴임을 보증하라 이번장의 핵심은... 싱글턴을 이해하고 싱글턴을 만드는 3가지 방식을 알아두자 - (3번째 방식[열거 타입으로 싱글턴 생성]이 가장 좋은 방법) 싱글턴이 뭐야? 인스턴스를 오직 하나만 생성할 수 있는 클래스이다 그런데 클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트를 테스트하기가 어렵다 (타입을 인터페이스로 정의하여 구현한 싱글턴이 아닌 싱글턴 인스턴스는 Mock 구현으로 대체할 수 없다) 싱글턴을 만드는 3가지 방식 1. public static 멤버를 통해 인스턴스에 접근 public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis() {..} public void leaveTheBuilding() {..... 2020. 9. 4.
[Redis(레디스)] 1. Redis? 실제 업무를 하면서 Redis를 2번 적용해보았다 (검색, 자동완성) 그런데 업무에 급하게 적용하면서 Redis를 깊게 공부하지 못했다. 이번 기회에 Redis(레디스)를 공부하면서 정리해보려고 한다 Redis가 뭐야? Redis(REmote Dictionary Server) 디스크가 아닌 메모리 기반의 'Key - Value' 구조 데이터 저장소 Redis는 NoSQL DBMS로 분류되기도 하고, memcached와 같은 인메모리(In-Memory) 솔루션으로 분류되기도 한다 Redis를 쓰면 뭐가 좋아? RDBMS에서 SELECT 쿼리문을 날려 데이터들을 FETCH했을 때, 구조상 디스크에서 데이터를 꺼내오는 데, 메모리에서 읽어들이는 것보다 대략 천배 가량 느리다 Redis를 사용하여 DB Read.. 2020. 9. 4.
[Codility(코딜리티)] Lesson1. BinaryGap (100%) Lesson 1 Iterations - BinaryGap (Java Solution) https://app.codility.com/programmers/lessons/1-iterations/binary_gap/ BinaryGap coding task - Learn to Code - Codility Find longest sequence of zeros in binary representation of an integer. app.codility.com 문제 10진수 N이 주어진다. 이 N을 이진수로 바꿨을 때, 1과 1사이에 0의 갯수를 센 후, 가장 긴 0의 개수를 출력하는 것이다 해결 1. 주어진 10진수 N을 2진수로 바꿔준다 1-1) java.lang.Integer에서 제공해주는 Integer.t.. 2020. 9. 3.