전체 글 40

[아이템07] 다 쓴 객체 참조를 해제하라

Java는 C/C++ 언어와는 달리 가비지 컬렉터가 메모리를 관리하고 있다. 하지만 Java 역시 메모리 관리에 신경을 써야 한다. public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack(){ elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push(Object e){ ensureCapacity(); elements[size++] = e; } public Object pop() { if(size == 0) throw new EmptyStackExcep..

[아이템05] 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라

많은 클래스가 하나 이상의 자원에 의존한다. 맞춤법 검사기는 사전에 의존하는데, 이런 클래스를 정적 유틸리티 클래스로 구현하는 모습을 많이 볼 수 있다. //정적 유틸리티를 잘못 사용한 예 public class SpellChecker { private final Lexicon dictionary = ...; private SpellChecker() {} // 객체 생성 방지 public static boolean isValid(String word) {...} public static List suggestions(String typo) {...} } //싱글턴을 잘못 사용한 예 public class SpeelChecker { private final Lexicon dictionary = ...; p..

var, let, const 차이

자바스크립트에서는 var로 변수 선언을 하였으나, 2015년 ES6가 등장하며 Const와 let이 나오게 되었다. 현재 var 키워드 대신 이 둘의 사용을 적극 권장하고 있다. 변수 선언 변수 선언은 var, let, const 키워드로 할 수 있다. 자바스크립트(이하 js)엔진은 변수 선언을 선언 -> 초기화 를 거쳐 수행된다. 선언 단계 : 변수 명을 등록하여 js 엔진에 변수의 존재를 알린다. 초기화 단계 : 값을 저장하기 위한 메모리 공간을 확보하고, 암묵적으로 undefined를 할당해 초기화한다. 할당 단계 : 초기화 된 변숫값에 새로운 값을 할당한다. var dante//변수 선언 console.log(dante) // output : undefined 변수가 만들어졌으므로, 그 값을 un..

Study/JavaScript 2022.09.18

[아이템04] 인스턴스화를 막으려거든 private 생성자를 사용하라

개발을 하다 보면 정적 메서드와 정적 필드만을 담은 클래스를 만들 때가 있다. java.lang.Math와 java.util.Arrays처럼 기본 타입 값이나 배열 관련 메서드들을 모아 놓을 수 있다. //Math 메서드 public final class Math { private Math() {} public static final double E = 2.7182818284590452354; public static final double PI = 3.14159265358979323846; public static double sin(double a) { return StrictMath.sin(a); // default impl. delegates to StrictMath } ... ... ... } ..

[아이템03] private 생성자나 열거 타입으로 싱글턴임을 보증하라

싱글톤(Singleton) 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다. 싱글톤 생성 방식 보통 두 방식을 사용하며 두 방식 모두 생성자는 private으로 감춰두고, 유일한 인스턴스에 접근할 수 있는 수단으로 public static 멤버를 하나 마련한다. 1. public static final 필드 방식 public class Singleton { public static final Singleton INSTANCE = new Singleton(); private Singleton() {}; } 장점 해당 클래스가 싱글턴임이 API에 명확히 드러난다. 간결함 private 생성자는 Singleton.INSTANCE를 초기화할 때 딱 한 번만 호출된다. 또한 private 외 다른 생성자가..

[PostgreSQL] 형 변환(Type Casts)

PostgreSQL은 두 가지의 형 변환 구문을 허용한다. CAST() SQL 표준인 CAST() 이다. CAST (expression AS type) -- 예 CAST(1234 AS TEXT)-- 숫자를 문자로 변환 CAST('16.35' AS FLOAT)-- 문자를 float 형으로 변환 CAST('2022-08-24' AS DATE)-- 문자를 날짜형으로 변환 CAST('15 minute' AS INTERVAL)--문자를 인터벌 형식으로 변환 Expression :: type PostgreSQL에서 지원하는 :: 방식이다. expression::type -- 예 3576::TEXT-- 숫자를 문자형으로 변환 '178.4'::DOUBLE PRECISION-- 문자를 더블형으로 변환 'true'::BO..

Study/Database 2022.08.24

[아이템02] 생성자에 매개변수가 많다면 빌더를 고려하라

정적 팩터리와 생성자는 선택적 매개변수가 많을 때 적절히 대응하기 어렵다. public class NutritionFacts { private final int servingSize; private final int servings; private final int calories; private final int fat; public NutritionFacts(int servingSize, int servings){ this(servingSize,servings,0); } public NutritionFacts(int servingSize, int servings, int calories){ this(servingSize,servings,calories,0); } public NutritionFacts..

[아이템01] 생성자 대신 정적 팩터리 메서드를 고려하라

클래스의 인스턴스를 얻는 전통적 수단은 public 생성자이다. 클래스는 생성자와 별도로 정적 팩터리 메서드를 제공할 수 있다. public 생성자 대신 정적 팩터리 메서드가 좋은 이유 5가지 첫 번째. 이름을 가질 수 있다. public class Dante { public Dante(){ //생성자 System.out.println("HI"); } public static void DanteWithMoney(){ // 정적 팩토리 메서드 System.out.println("I have money"); } public static void main(String[] args) { DanteWithMoney(); } } -> 생성자 이름이 없음 반환될 객체의 특성을 알기 힘듦 -> 정적 팩토리 메서드 이름..

[Java] Servlet(서블릿) 이란?

사용자 요구에 맞춰 동적으로 반응하는 페이지을 만들기 위해 만들어진 것이 서블릿이다. 서블릿은 JSP 표준이 나오기 전, 만들어진 표준으로 java로 웹 어플리케이션을 개발할 수 있도록 하기 위해 만들어졌다. 서블릿을 이용하면 자바 클래스를 이용해서 웹 어플리케이션을 개발하게 된다. 서블릿은 웹의 요청과 응답의 흐름을 메서드 호출을 통해 체계적으로 다룰 수 있게 해준다. 오늘 다룰 내용과 연관하여 내가 업무에서 쓰는 개발 환경은 다음과 같다. 엄청 레거시한 코드와 개발 환경 Java 1.8 Servlet 3.0(web.xml을 통한 매핑) tomcat 8.0 MVC2 구조 Spring 사용 안함 1. web.xml로 매핑하기 WEB-INF 폴더의 web.xml 파일에 서블릿 클래스로 등록한다. Hello..

Study/Java 2022.03.01

Git 설치

로컬에 깃 설치하는 방법을 정리해놓자 1. 아래 사이트에 접속하여 각자 OS버전에 맞는 git 다운 https://git-scm.com/ Git git-scm.com 2. 오른쪽에 다운로드 할 수 있는 버튼이 있다. 현재 기준 2.35.1 버전 3. "Click here to download" 클릭 통해 설치 파일을 다운받아 실행시킨다. 그 후 "NEXT" 클릭 4. Git 이 저장될 장소 선택 5. 추가 구성요소 선택 나는 아무 것도 건드리지 않고 기본으로 지정 6. 시작 폴더 경로 선택 "Don't create a Start Menu folder" 를 체크하면 시작메뉴에 추가하지 않는다. 7. Git을 사용할 에디터 선택 나는 기본 에디터를 선택하였다. (default) 8. 새로운 저장소 9. 환경..

Study/Tool 2022.02.08