일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- docker
- 김영한
- Numpy
- inflearn
- java
- 분석함수
- 인프런
- REGEXP_SUBSTR
- 제네릭
- 불친절한 SQL 프로그래밍
- JPA
- 이것이자바다
- 스프링 핵심원리
- 자바의정석 연습문제
- 스프링입문
- 계층 쿼리
- Java의정석
- Python
- DispatcherServlet
- 서블릿
- 시큐어코딩
- 자바연습문제
- 불친절한SQL프로그래밍
- 스프링 부트와 JPA
- 스프링
- Secure Coding
- 스프링MVC
- 자바공부
- Spring
- 자바의정석
- Today
- Total
목록전체 글 (118)
Continuous Challenge
태그를 추가하여 해당 프로젝트의 springboot 버전을 넣어주었더니 오류가 해결되었다.
스레드 상태 1. 스레드 객체를 생성(NEW)하고, start() 메소드를 호출하면 실행 대기 상태(RUNNABLE)가 된다. 2. 실행을 대기하는 스레드는 CPU 스케쥴링에 따라 CPU를 점유하고 run() 메소드를 실행한다. 이 때를 실행(RUNNING) 상태라고 한다. 3. 실행 스레드는 run() 메소드를 모두 실행하기 전에 스케줄링에 의해 다시 실행 대기 상태로 돌아갈 수 있다. 이렇게 스레드는 실행 대기 상태와 실행 상태를 번갈아 가면서 자신의 run() 메소드를 조금씩 실행한다. 4. 실행 상태에서 run() 메소드가 종료되면 더 이상 실행할 코드가 없기 때문에 스레드의 실행은 멈추게 된다. 이를 종료 상태(TERMINATED)라고 한다. 실행 상태에서 일시 정지 상태로 가기도 하는데, 일시..
작업 스레드 생성과 실행 멀티 스레드로 실행하는 프로그램을 개발하려면 몇 개의 작업을 병렬로 실행할지 결정하고 각 작업별로 스레드를 생성해야 한다. 자바 프로그램은 메인 스레드가 반드시 존재하기 때문에 메인 작업 이외에 추가적인 작업 수만큼 스레드를 생성하면 된다. 자바는 작업 스레드도 객체로 관리하므로 클래스가 필요하다. Thread 클래스로 직접 객체를 생성해도 되지만, 하위 클래스를 만들어 생성할 수도 있다. Thread 클래스로 직접 생성 Thread thread = new Thread(Runnable target); java.lang 패키지에 있는 Thread 클래스로부터 작업 스레드 객체를 직접 생성하려면 다음과 같이 Runnable 구현 객체를 매개값으로 갖는 생성자를 호출하면 된다. Run..
멀티 스레드 용어 정리 프로세스 : 운영체제에서 실행 중인 프로그램 멀티 태스킹 : 두 가지 이상의 작업을 동시에 처리하는 것. 운영체제는 멀티 프로세스를 생성해서 처리. 멀티 태스킹이 꼭 멀티 프로세스를 의미하지는 않음. 하나의 프로세스가 두 가지 이상의 작업을 처리할 수 있는 이유는 멀티 스레드(Multi thread)가 있기 때문이다. 스레드(Thread)는 코드의 실행 흐름을 말하는데, 프로세스 내에 스레드가 두 개라면 두 개의 코드 실행 흐름이 생긴다는 의미이다. 멀티 프로세스들은 서로 독립적이므로 하나의 프로세스에서 오류가 발생해도 다른 프로세스에게 영향을 미치지 않는다. 하지만 멀티 스레드는 프로세스 내부에서 생성되기 때문에 하나의 스레드가 예외를 발생시키면 프로세스가 종료되므로 다른 스레드..
제네릭 타입을 매개값이나 리턴 타입으로 사용할 때 타입 파라미터로 ?(와일드카드)를 사용할 수 있다. 리턴타입 메소드명(제네릭타입
모든 타입으로 대체할 수 없고, 특정 타입과 자식 또는 구현 관계에 있는 타입만 대체할 수 있는 타입 파라미터를 제한된 타입 파라미터(Bounded type parameter) 라고 한다. public 리턴타입 메소드(매개변수, ...) {...} 상위 타입은 클래스뿐만 아니라 인터페이스도 가능하다. public static boolean compare(T t1, T t2) { double v1 = t1.doubleValue();//Number의 doubleValue() 메소드 사용 double v2 = t2.doubleValue(); return (v1 == v2); } 위 코드는 Number 타입과 자식 클래스(Byte, Short, Integer, Long, Double)에만 대체 가능한 타입 파라..
제네릭 메소드는 타입 파라미터를 가지고 있는 메소드를 말한다. public 리턴타입 메소드명(매개변수, ...) {...} 타입 파라미터가 메소드 선언부에 정의된다는 점에서 제네릭 타입과 차이가 있다. 제네릭 메소드는 리턴 타입 앞에 기호를 추가하고 타입 파라미터를 정의한 뒤, 리턴 타입과 매개변수 타입에서 사용한다. public Box boxing(T t) {...} boxing() 메소드는 타입 파라미터로 를 정의하고 매개변수 타입과 리턴 타입에서 T를 사용한다. (매개변수 : T, 리턴 타입 : T를 내용물로 갖는 Box 객체) 타입 파라미터 T는 매개값이 어떤 타입이냐에 따라 컴파일 과정에서 구체적인 타입으로 대체된다. public class Box { //필드 private T t; //Gett..
제네릭 타입은 결정되지 않은 타입을 파라미터로 가지는 클래스와 인터페이스를 말한다. public class 클래스명 {...} public interface 인터페이스명 {...} 제네릭 타입은 선언부에 '' 부호가 붙고 그 사이에 타입 파라미터들이 위치한다. 타입 파라미터는 변수명과 동일한 규칙에 따라 작성할 수 있지만 일반적으로 대문자 알파벳 한 글자로 표현한다. 외부에서 제네릭 타입을 사용하려면 타입 파라미터에 구체적인 타입을 지정해야 한다. 만약 지정하지 않으면 Object 타입이 암묵적으로 사용된다. 클래스에서의 사용 예제 //제네릭 타입 public class Product { //필드 private K kind; private M model; //메소드 public K getKind() { ..
Box 클래스를 선언하려고 한다. Box의 내용물 content 필드를 선언하려고 할 때, 타입을 무엇으로 해야 할까? Box 는 다양한 내용물을 저장해야 하므로 특정 클래스 타입으로 선언할 수 없다. 그래서 Object 타입으로 선언한다. public class Box { public Object content; } Object 타입은 모든 클래스의 최상위 부모 클래스이다. 그렇기 때문에 content 필드에는 어떤 객체든 대입이 가능하다. 문제는 Box 안의 내용물을 얻을 때이다. content 는 Object 타입이므로 어떤 객체가 대입되어 있는지 알 수 없다. 이 때 대입된 내용물의 타입을 안다면 강제 타입 변환을 거쳐 얻을 수 있다. String content = (String) box.cont..
String 클래스 String 클래스는 문자열을 저장하고 조작할 때 사용한다. ex) 네트워크 통신으로 얻은 byte 배열을 원래 문자열로 변환하는 경우 //기본 문자셋으로 byte 배열을 디코딩해서 String 객체로 생성 String str = new String(byte[] bytes); //특정 문자셋으로 byte 배열을 디코딩해서 String 객체로 생성 String str = new String(byte[] bytes, String charsetName); import java.util.Arrays; public class BytesToStringExample { public static void main(String[] args) throws Exception { String data = ..