Programing Language

Programing Language/Java

[Effective Java] 싱글턴 만드는 방법

private 생성자나 열거 타입으로 싱글턴임을 보증하라 싱글턴(singleton)이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다. 싱글톤이란 개념 자체는 그리 어렵지 않다. 간단하게만 보려면 아래 글만 참고해도 된다. [Design Pattern] Singleton (싱글톤) Singleton 디자인 패턴 Singleton(싱글톤)이란 인스턴스가 단 1개만 생성되어야 하는 패턴이다. Java를 사용하여 싱글턴을 만드는 방법은 다음과 같다. Singleton public class SingletonTest { private int num; private S mimah.tistory.com 책 이펙티브 자바를 토대로 싱글톤을 만드는 세 가지 방법을 서술했다. 세 가지 방법 외에도 다양한 방법이..

Programing Language/Java

[Java] Builder pattern 특징과 장단점 with. setter

빌더 패턴 특징과 장단점 빌더 패턴을 살펴보기 전, 객체를 생성 시 사용하는 두 가지 방식을 간단하게 살펴본다. 빌더 패턴은 점층적 생성자 패턴과 자바빈즈 패턴의 장점을 채택하여 만들어졌다고 볼 수 있다. 점층적 생성자 패턴 유물이다. 요즘엔 거의 자바빈즈 패턴(setter) 또는 빌더 패턴을 사용하므로 실무 코드에서는 보기 어렵다. 말 그대로 점층적으로 생성자를 늘린다는 의미이다. 보통 필드 값이 추가될 때마다 생성자를 하나씩 추가한다. public class NutritionFacts { private final int servingSize; private final int servings; private final int calories; private final int fat; private fi..

Programing Language/Java

정적 팩토리 메서드 (Static factory method) [Effective Java]

정적 팩토리 메서드 (Static factory method) 정적 팩토리 메서드란 간단히 말해 객체를 생성할 때, 생성자를 쓰지 않고 정적 메서드를 사용하는 것이다. 디자인 패턴의 팩토리 메서드와는 다른 것이며, 디자인 패턴 중에는 정적 팩토리 메서드와 일치하는 것은 존재하지 않는다. 이펙티브 자바에 나오는 정적 팩토리 메서드의 장단점을 쉽게 이해하기 위해 예제 코드를 함께 기술하였으며, 이것은 무조건적인 정답이 아니기 때문에 직접 예제 코드를 만들어보는 것도 좋은 방법이다. 개인적으로는 해당 기법을 처음 보는 사람이라면 장점 1, 2, 4번과 단점만을 이해하여도 충분히 잘 사용할 수 있을 것이라 생각한다. 생성자의 접근 제어자가 public인 경우, 생성자를 통해 객체 생성을 언제 어디서든 제한 없이..

Programing Language/JavaScript

[JavaScript/jQuery] video muted 설정

video 태그 muted 설정하기 HTML5 에서 video 태그가 추가됨으로써 동영상을 쉽게 삽입할 수 있게 되었다. video 태그에는 몇 가지 속성 값을 정할 수 있다. autoplay, controls, muted 등이 있다. : 비디오 삽입 요소 - HTML: Hypertext Markup Language | MDN HTML 요소는 비디오 플레이백을 지원하는 미디어 플레이어를 문서에 삽입합니다. 오디오 콘텐츠에도 사용할 수 있으나, 요소가 사용자 경험에 좀 더 적합합니다. developer.mozilla.org controls 해당 속성을 명시하면 소리 조절, 동영상 탐색, 일시 정지 및 재시작 기능을 지원하는 컨트롤러 버튼을 제공한다. 컨트롤러 버튼을 사용해서 동영상을 음소거 할 수 있다. ..

Programing Language/Java

[Java] 멀티 스레드(Multi thread)

멀티 스레드(Multi thread) 스레드에 대한 개념을 설명하기 전, 스레드는 프로세스 내에 존재하는 것이므로 프로세스에 대한 개념을 간략히 설명한다. 프로세스(process) 운영체제에서 실행 중인 하나의 애플리케이션을 프로세스라고 부른다. 사용자가 애플리케이션을 실행하면 운영체제로부터 실행에 필요한 메모리를 할당받아 애플리케이션의 코드를 실행하는데, 이때 실행되는 애플리케이션이 프로세스이다. 작업 관리자를 켰을 때 프로세스 탭에 출력되는 게 프로세스다. 우리가 크롬이나 엣지를 사용해 인터넷을 볼 때 작업 관리자의 프로세스 탭에 크롬이나 엣지가 나타난다. 이처럼 크롬과 엣지도 프로세스이다. 만약 인터넷 창을 여러 개 띄워서 사용하기 위해 크롬 창을 여러 개 띄운다면, 이것이 멀티 프로세스다. 스레드..

Programing Language/Python

[Python] 문자열 관련 함수

문자열 관련 함수 문자 개수 세기 - count 문자열.count(문자) 문자열 내에 있는 문자의 개수를 반환한다. 문자 위치 찾기 1 - find 문자열.find(문자) 문자열 중 문자가 처음으로 나오는 인덱스 값을 반환한다. 만약 찾는 문자가 문자열 내에 존재하지 않는다면 -1을 반환한다. 문자 위치 찾기 2 - index 문자열 a는 find에서 사용했던 것과 동일하다. 문자열.index(문자) find와 같은 기능이다. 다만, 찾는 문자가 존재하지 않는 경우 ValueError가 발생한다. 문자열 삽입 - join 문자열.join(문자열) 이때 괄호 안에 들어가는 문자열 자리에는 리스트 또는 튜플도 사용 가능하다. 위 예시로 살펴보자면 문자열 asd 사이사이에 문자열 ,를 삽입한다. 대문자 변환 ..

Programing Language/Java

[Java] StringTokenizer, NoSuchElementException 예제

StringTokenizer 문자열이 특정 구분자(delimiter)로 연결되어 있는 경우, 구분자를 기준으로 부분 문자열을 분리하기 위해 이용하는 클래스이다. String.split() 메서드를 사용하여 문자열을 구분할 수도 있다. 일반적으로 코딩할 때 split() 메서드를 사용할 때의 속도와 StringTokenizer를 사용할 때의 속도가 그렇게까지 유의미한 차이가 나진 않지만, 시간제한이 있는 알고리즘 문제를 푸는 등의 경우는 속도가 비교적 빠른 StringTokenizer를 사용하는 게 좋다고 생각한다. split() 메서드는 정규 표현식을 사용해 구분하고, StringTokenizer는 문자를 사용해 구분한다는 점에서도 차이가 존재한다. StringTokenizer 사용법은 다음과 같다. i..

Programing Language/Java

[Java] 어노테이션 (Annotation)

어노테이션(Annotation) 어노테이션은 애플리케이션이 처리해야 할 데이터가 아닌, 컴파일 과정과 실행 과정에서 코드를 어떻게 컴파일하고 처리할 것인지를 알려주는 정보이다. 어노테이션은 클래스, 인터페이스, 어노테이션, 필드, 생성자, 메서드 등 여러 곳에 적용될 수 있다. 어노테이션은 대게 아래 세 가지 용도로 사용된다. 코드 문법 에러 체크 어노테이션은 컴파일러에게 코드 문법 에러를 체크하도록 정보를 제공한다. 예로 @Override 어노테이션이 메서드 앞에 명시된 경우, 이는 해당 메서드가 오버라이드 된 메서드임을 컴파일러에게 알려주는 것이다. 컴파일러는 @Override 어노테이션을 보고 그 메서드가 오버라이드 된 것인지 확인한다. 그리고 오버라이드 된 메서드가 아닌 경우 컴파일 에러를 발생시..

Programing Language/Java

[Java] 정적 초기화 블록

정적 초기화 블록 정적 멤버는 클래스에 고정된 멤버로, 객체를 생성하지 않고 사용할 수 있다. 정적 필드는 보통 필드 선언과 동시에 초기 값을 주지만, 계산이 필요한 초기화 작업인 경우 static 블록을 생성하여 해당 블록 내에서 초기화해주기도 한다. 정적 블록은 클래스가 메모리로 로딩될 때 자동적으로 실행되며, 여러 개의 정적 블록이 선언되어 있는 경우 선언된 순서대로 실행된다. 정적 메서드와 정적 블록은 객체가 없어도 실행되기 때문에 해당 {} 내에 인스턴스 필드나 인스턴스 메서드를 사용할 수 없다. 그리고 this 키워드도 사용이 불가능하다. 따라서 정적 메서드와 정적 블록에서 인스턴스 멤버를 사용하기 위해서는 객체를 먼저 생성한 뒤 참조 변수로 접근해야 한다. public class MyClas..

Programing Language/Java

[Java] 메서드의 매개 변수 개수가 정해져 있지 않을 때

메서드의 매개 변수 개수가 정해져 있지 않을 때 메서드 선언 시 매개 변수의 개수를 정하지 않고, 메서드 호출 시마다 매개 변수 개수를 바꾸며 호출해야 할 때가 있다. 이때 두 가지 방법으로 매개 변수의 개수를 랜덤 하게 지정할 수 있다. sum 메서드를 예시로 든다. int sum1(int[] values) { int sum = 0; for (int val : values) sum += val; return sum; } int sum2(int... values) {} 첫 번째로는 매개 변수를 배열 타입으로 선언하는 것이다. 메서드 호출 시 배열을 넘겨줌으로써 배열 안에 담긴 데이터를 모두 전달한다. 단점이 있다면 메서드 호출 전 배열을 미리 선언해야 된다는 것이다. int[] values = {1, 2..

Programing Language/Java

[Java] 배열 복사, System.arraycopy()

배열 복사, System.arraycopy() 기본적으로 배열은 한 번 생성한 이후에 크기를 변경할 수 없다. 따라서 기존 배열에서 데이터를 추가하기 위해서 기존 배열보다 저장 공간이 더 큰 새로운 배열을 만든 뒤, 새로운 배열로 데이터를 복사해야 한다. for문을 사용하여 데이터를 복사할 수 있고, for문 말고도 System.arraycopy() 메서드를 사용하여 복사할 수 있다. System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length); src는 원본 배열, srcPos는 원본 배열에서 복사를 시작할 데이터의 인덱스 값이다. dest는 새 배열이고, destPos는 새 배열에서 복사한 데이터를 붙여 넣을 시작 인덱스..

Programing Language/Java

[Java] 자바에서의 String 타입

자바에서의 String 타입 String name = "홍길동"; String 객체를 생성할 때 문자열 값인 "홍길동"은 String 객체로 생성되고, name 변수는 생성된 String 객체를 참조한다. String 타입은 클래스 타입으로, 참조 타입이기 때문에 기본 타입과는 달리 힙 영역에 생성되기 때문에 이러한 구조를 가진다. name 변수 자체는 스택 영역에 저장되고, 문자열 리터럴인 "홍길동"은 힙 영역에 String 객체로 생성된다. 그리고 name 변수에 "홍길동"이 담겨있는 String 객체의 주소 값이 저장된다. 문자열 리터럴 자바에서는 문자열 리터럴이 동일하다면 String 객체를 공유한다. String name1 = "홍길동"; String name2 = "홍길동"; 따라서 위와 같은..

밈아
'Programing Language' 카테고리의 글 목록