본문 바로가기

분류 전체보기

(229)
배열(1) 배열 리터럴. 배열 요소 생성 자바스크립트에서 배열의 크기는, 인덱스 중 가장 큰값을 기준으로... -> 실제 원소 갯수와 배열의 크기 일치x 모든 배열은 length 프로퍼티를 가짐. -> 배열 내에 가장 큰 인덱스에 1을 더한 값. length는 101이지만, 실제 메모리는 length의 크기처럼 할당되지는 않음. 다음과 같이 length의 값을 명시적으로 변경가능하다. arr[2] 처럼, length 프로퍼티를 벗어나는 실제 값은 삭제된다.
깊이 우선탐색 package main01; import java.util.ArrayList; import java.util.List; public class Main { int[][] adj = { {1, 9}, {0, 2, 3, 5, 7}, {1, 3, 4, 5}, {1, 2}, {2}, {1, 2, 6}, {5}, {1, 8, 9}, {7}, {0, 7} }; List visited; public static void main(String[] args) { new Main().dfsAll(); } void dfsAll() { visited = new ArrayList(); for (int i = 0; i < adj.length; i++) { visited.add(false); // visited 모두 false로 ..
[스레드] 3. 스레드 우선 순위 -> 동시성(Concurrency) : 멀티 작업을 위해 하나의 코어에서 멀티 스레드가 번갈아 가며 실행하는 성질 -> 병렬성(Parallelism) : 멀티 작업을 위해 멀티 코어에서 개별 스레드를 동시에 실행하는 성질 스레드 스케쥴링 -> 스레드의 개수가 코어의 수보다 많을 경우 * 스레드를 어떤 순서로 동시성으로 실행할 것인가 : 스레드 스케쥴링 * 스레드 스케쥴링에 의해 스레드들은 번갈아 가면서 그들의 run() 메소드를 조금씩 실행 -> 자바의 스레드 스케쥴링 * 우선순위(Priority)방식 : 코드로 제어가능. 우선순위가 높은 스레드가 실행상태를 더 많이 가지도록 스케쥴링 * 순환할당(Round-Robin)방식: 코드로 제어할 수 없음. 시간할당량(Time Slice)을 정해서 하나의 스레드..
[스레드] 2. 작업 스레드 생성과 실행 - 2 Thread 하위 클래스로부터 생성 class WorkerThread extends Thread { @Override public void run() { // 스레드가 실행할 코드; } } Thread thread = new WorkerThread(); thread.start(); Thread thread = new Thread() { @Override public void run() { // 스레드가 실행할 코드; } }; thread.start(); 예제 package main; import java.awt.*; public class BeepThread extends Thread { @Override public void run() { // 비프음을 5번 반복해서 소리나게 하는 작업 Toolkit ..
[스레드] 2. 작업 스레드 생성과 실행 - 1 몇 개의 작업을 병렬로 실행할지 결정 메인작업: 메인스레드(프로그램 시작) 작업1: 스레드1(네트워킹) 작업2: 스레드2(드로잉) 작업 스레드 생성방법 -> Thread 클래스로부터 직접 생성 -> Thread 하위 클래스로부터 생성 Thread 클래스로부터 직접 생성 class Task implements Runnable { @Override public void run() { // 스레드가 실행할 코드; } } 위 작업을 실행하는 방법1) Runnable task = new Task(); Thread thread = new Thread(task); thread.start(); // 작업실행 방법2) Thread thread = new Thread(new Runnable() { @Override pub..
[스레드] 1. 멀티 스레드 개념 프로세스 -> 실행 중인 하나의 프로그램 멀티태스킹 -> 두 가지 이상의 작업을 동시에 처리하는 것 -> 멀티 프로세스 : 독립적으로 프로그램들을 실행하고 여러 가지 작업 처리 -> 멀티 스레드: 한 개의 프로그램을 실행하고 내부적으로 여러 가지 작업 처리 메인 스레드 -> 모든 자바 프로그램은 메인 스레드가 main() 메소드를 실행하면서 시작된다. -> main() 메소드의 첫 코드부터 아래로 순차적으로 실행한다. -> main() 메소드의 마지막 코드를 실행하거나, return 문을 만나면 실행이 종료된다. -> main 스레드는 작업 스레들을 만들어서 병렬로 코드들을 실행할 수 있다. 즉 멀티 스레드를 생성해서 멀티 태스킹을 실행한다. -> 프로세스의 종료 * 싱글 스레드: 메인 스레드가 종료하면..
스칼라 기본(5) 스칼라의 목적은 프로그래머들이 함수형 스타일과 명령형 스타일의 장점을 모두 취할 수 있게 돕는 것이다. 이를 위해 스칼라 컬렉션 라이브러리에서 변경 가능한 컬렉션과 변경 불가능한 컬렉션을 구분해둔 곳이 있다. 예를 들어, 배열은 항상 변경 가능하지만 리스트는 항상 변경 불가능하다. 하지만 집합이나 맵에 대해서는 변경 가능한 것과 변경 불가능한 것을 모두 제공한다. 다만, 두 버전 모두 동일한 간단한 이름을 사용한다. 집합이나 맵 모두 스칼라에서는 클래스 계층 안에서 변경 가능성을 모델링한다. 집합 스칼라에는 집합을 위한 기반 트레이트(trait)가 있다. 그리고 이것을 상속하는 두개의 서브트레이트가 있는데, 하나는 변경가능한 집합, 다른 하나는 변경 불가능한 집합을 위한 것이다. scala.collect..
회원 관리 예제 - 백엔드 개발(1) 1. 비즈니스 요구사항 정리 * 데이터: 회원ID, 이름 * 기능: 회원 등록, 조회 * 아직 데이터 저장소가 선정되지 않음 controller: 웹 MVC의 컨트롤러 역할 service: 핵심 비즈니스 로직 구현 repository: 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리 domain: 비즈니스 도메인 객체, 예) 회원, 주문, 쿠폰 등등 주로 데이터베이스에 저장하고 관리 2. 회원 도메인과 리포지토리 만들기 회원객체 package com.devjones.springfirst.domain; public class Member { private Long id; private String name; public Long getId() { return id; } public void set..
스프링부트와 웹 개발 1. 정적 컨텐츠 https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/reference/html/spring-boot-features.html#boot-features-spring-mvc-static-content Spring Boot Features Graceful shutdown is supported with all four embedded web servers (Jetty, Reactor Netty, Tomcat, and Undertow) and with both reactive and Servlet-based web applications. It occurs as part of closing the application context and is pe..
스프링부트 라이브러리 및 view 설정 Gradle은 의존관계가 있는 라이브러리를 함께 다운로드 한다. 스프링 부트 라이브러리 spring-boot-starter-web spring-boot-starter-tomcat: 톰캣 (웹서버) spring-webmvc: 스프링 웹 MVC spring-boot-starter-thymeleaf: 타임리프 템플릿 엔진(View) spring-boot-starter(공통): 스프링 부트 + 스프링 코어 + 로깅 spring-boot spring-core spring-boot-starter-logging logback, slf4j 테스트 라이브러리 spring-boot-starter-test junit: 테스트 프레임워크 mockito: 목 라이브러리 assertj: 테스트 코드를 좀 더 편하게 작성하게 도와..