Back-end 100

작업 스레드 생성과 실행

멀티 스레드로 실행하는 애플리케이션을 개발하려면 먼저 몇 개의 작업을 병렬로 실행할지 결정하고 각 작업별로 스레드를 생성해야 한다. 어떤 자바 애플리케이션이건 메인 스레드는 반드시 존재하기 대문에 메인 작업 이외에 추가적인 병렬 작업의 수만큼 스레드를 생성하면 된다. 자바에서는 작업 스레드도 객체로 생성되기 때문에 클래스가 필요하다. java.lang.Thread 클래스를 직접 객체화 해서 생성해도 되지만, Thread 를 상속해서 하위 클래스를 만들어 생성할 수도 있다. Thread 클래스로부터 직접 생성 java.lang.Thread 클래스로부터 작업 스레드 객체를 직접 생성하려면 다음과 같이 Runnable을 매개값으로 갖는 생성자를 호출해야 한다 Thread thread = new Thread(R..

멀티 스레드 개념

프로세스와 스레드 프로세스(Process) : 운영체제에서는 실행 중인 하나의 애플리케이션 - 사용자가 애플리케이션을 실행하면 운영체제로부터 실행에 필요한 메모리를 할당받아 애플리케이션의 코드를 실행 하나의 애플리케이션은 다중 프로세스를 만들기도 한다 . Chrome 브라우저를 두개 실행 했다면 두 개의 Chrome 프로세스 생성 프로그램 -> 실행 프로세스 -> 실행 프로세스 멀티 태스킹 : 두 가지 이상의 작업을 동시에 처리하는 것, 운영체제는 멀티 태스킹을 할 수 있도록 CPU 및 메모리 자원을 프로세스마다 적절히 할당 , 병렬로 실행 워드로 문서작업을 하면서 동시에 윈도우 미디어 플레이로 음악을 들을수 있다. 멀티 태스킹은 꼭 멀티 프로세스를 뜻하지는 않는다. 한 프로세스 내에서 멀티 태스킹을 할..

디자인 패턴 입문

생성 구조 행동 연관성을 알아내는데 도움 패턴들간의 참조 관계를 이용 패턴 마다 관련된 패턴을 정의는데 어떻게 다른 패턴들과 결합되었는지, 어떤 패턴들이 서로 잘 작용하는지 알아내는 통찰력 제공 문제 중심으로 패턴에 접근 재사용 가능한 객체지향 소프트웨어를 개발하면서 일어나는 일반적인 문제들을 이해하고 난 후 이런 문제들응 해결하는 패턴을 찾아 읽는 것 가장 일반적인 패턴 추상 팩토리 패턴 팩토리 메서드 패턴 적응자 패턴 감시자 패턴 복합체 패턴 전략 패턴 장식자 패턴 템플릿 메서드 패턴 "유연하고 재사용가능한 설계를 처음부터 정확하게 하기는 불가능 매우 어렵" "전문가들은 초보자처럼 모든 문제를 처음 기초단계에서 해결하려고 하지 않는다. 전에 사열했던 해결책을 다시 사용" "결국에는 많은 객체디향 시스..

java.time 패키지

자바 7이전 까지는 Date와 Calendar 클래스를 이용해서 날짜와 시간 정보를 얻을 수 있었다. Date 클래스의 대부분의 메소드는 Deprecated 되었고 , Date의 용도는 단순히 특정 시점의 날자 정보를 저장하는 역할만 한다 . Calendar 클래스는 날짜와 시간 정보를 얻기 에는 충분하지만, 날짜와 시간을 조작하거나 비교하는 기능이 불충분하다. 자바 8부터 날짜와 시간을 나타내는 여러가지 API를 새롭게 추가했다. 이 API는 java.util 패키지에 없고 별도로 java.time 패키지와 하위 패키로 제공 된다 패키지 설명 java.time 날짜와 시간을 나타내는 핵심 API인 LocalDate, LocalTime, LocalDateTime, ZonedDateTime을 포함하고 있다..

Format 클래스

정수 세 자리마다 쉼표(,)를 넣고 싶다면 어떻게 해야할까? 정수를 문자열로 변환한 다음 세자리, 씩 끊어서 쉼표를 넣을수있을것이다. 이작업은 코드가 지저분해진다 많은 수의 점수를 리스트화해서 출력할때 소수점 한자리로 일정하게 맞추어 출력하려면 어떻게 해야할까? 각점수에 10을 곱해서 정수화 하고, 다시 10.0 으로 나누어 소주점 한자리로 만드러야 한다 이작업도 코드가 지저분해보인다 날짜 역시 원하는 문자열로 출력하기 위해서는 Calendar로부터 년, 월, 일 , 시 ,분, 초 를 얻어 원하는 문자열로 조합하는 과정을 거쳐야한다. 자바 에서는 이러한 문제들을쉽게 해결할 수있는 방법을 제공 -> 형식 클래스 java.text 패키지에 포함되어있다 숫자 형식을 위해 DecimalFormat 날짜형식을 위..

Date, Calender 클래스

날짜는 프로그램에서 자수 사용되는 데이터 Date 와 Calendar 클래스가 날짜 및 시각을 읽을 수 있도록 제공 이 두클래스는 모두 java.util 패키지에 포함 Date 클래스 Date는 날짜를 표현하는 클래스 Date 클래스는 객체간에 날짜 정보를 주고 받을때 주로 사용 Date 클래스에는 여러개의 생성자가 선언되어 있지만 대부분 Deprecated 되어 현재는 Date () 생성자만 주로 사용 Date now = new Date(); 현재 날자를 문자열로 얻고 싶다면 toString() 메소드를 사용 toString() 메소드는 영문으로 된 날짜를 리턴하는데 만약 특정 문자열로 포맷으로 얻고 싶다면 java.text.SimpleDateFomat 클래스를 이용 public class DateEx..

Math, Random 클래스

Math 클래스 java.lang.Math 클래스는 수학계산에 사용할 수 있는 메소드를 제공 Math 클래스가 제공하는 메소드는 모두 정적 (Static) 이므로 Math 클래스로 바로 사용이 가능 메소드 설명 예제 코드 리턴값 int abs(int a) double abs(dobule a) 절대값 int v1 = Math.abs(-5); double v2 =Math.abs(-3.14); v1 = 5 v2 = 3.14 double ceil(double a) 올림값 double v3 = Math.ceil(5.3); double v4 = Math.ceil(-5.3); v3 = 6.0 v4 = -5.0 double floor(double a) 버림값 double v5 = Math.floor(5.3); doub..

Wrapper(포장) 클래스

자바는 기본타입 (byte, char, short, int, long, float, double, boolean) 의 값을 갖는 객체를 생성 이런 객체를 포장(Wrapper) 객체 기본 타입의 값을 내부에 두고 포장하기 때문 포장 객체의 특징은 포장하고 있는 기본 타입 값은 외부에서 변경할수 없다 내부의 값을 변경하고 싶다면 새로운 포장객체를 만들어야 함 java.lang 패키지에 포함 기본 타입 포장 클래스 byte Byte char Character short Short int Integer long Long float Float double Double boolean Boolean 박싱(Boxing)과 언박싱(Unboxing) 기본 타입의 값을 포장 객체로 만드는 과정을 박싱(Boxing) 포장 객..

Array 클래스

Arrays 클래스는 배열 조작 기능을 가지고 있다. 배열 조작이란 배열의 복사, 항목 정렬, 항목 검색 과 같은 기능을 말한다 단순한 배열 복사는 System.arraycopy() 메소드를 사용할수 있으나 Arrays 는 추가적으로 항목 정렬, 항목 검색, 항목 비교와 같은 기능을 제공해준다 Arrays 클래스는 모든 메소드는 정척(Static)이므로 Arrays 클래스로 바로 사용이 가능 리턴 타입 메소드 이름 설명 int binarySearch(배열, 찾는값) 전체 배열 항목에서 찾는 값이 있는 인덱스 리턴 타겟 배열 copyOf(원본배열, 복사할 길이) 원본 배열의 0번 인덱스에서 복사할 길이만큼 복사할 배열 리턴, 복사할 길이는 원본 배열의 길이보다 커도 되며, 타겟 배열의 길이가 된다. 타겟 ..

정규 표현식과 Pattern 클래스

문자열이 정해져 있는 형식(정규 표현식: Regular Expression) 으로 구성되어 있는지 검증해야하는 경우가 있다 정규 표현식 작성 방법 java.util.regex.Pattern 클래스를 찾아 Summary of regular - expression constructs 참조 정규표현식은 문자 또는 숫자 기호와 반복기호가 결합된 문자열 기호 설명 [] 한개의문자 [abc] a,b,c 중 하나의 문자 [^abc] a,b.c 이외의 하나의 문자 [a-zA-Z] a~z, A~Z 중 하나의 문자 \d 한 개의 숫자 [0-9]와 동일 \s 공백 \w 한 개의 알파벳 또는 한개의 숫자 [a-zA-Z_0-9] 와 동일 ? 없을 또는 한개 * 없음 또는 한개 이상 + 한 개 이상 {n} 정확히 n개 {n.} ..