본문 바로가기

분류 전체보기

(49)
멀티스레드의 개념 멀티스레드를 설명하기에 앞서 프로세스와 스레드부터 먼저 짚고 넘어가고자 한다. 프로세스와 스레드 프로세스 (Process) 프로세스는 현재 실행 중인 프로그램이다. 프로그램이 실행 중이지 않을 때는 보통 하드디스크에 저장되어 있다가 실행할 때 메인메모리로 이동한다. 이때 메모리는 다음 그림과 같이 구분된다. 프로세스 메모리할당 구조 Code 영역: 프로그램 실행 코드를 위한 공간이다. 우리가 작성한 코드는 바로 여기에 있을 것이다. 코드영역은 읽기 전용이다. Data 영역: 전역변수 등 고정된 데이터를 위해 할당된 공간이다. Java의 경우 static 변수를 만들면 이쪽에 있을 것이다. Heap 영역: 동적할당 데이터를 위한 공간이다. Java의 경우 객체가 생성되면 이쪽에 저장이 될 것이다. Stac..
JDBC가 뭐지? 오늘은 JAVA 애플리케이션을 개발할 때 꼭 쓰게 되는 JDBC에 대해서 알아보겠다. JDBC가 뭐지? 아주 간단히 말하면 JAVA 애플리케이션에서 DATABASE에 접속할 수 있도록 도와주는 API이다. 이 JDBC는 처음 썬마이크로즈에서 JDK 1.1을 출시했을 때 일부로 같이 출시하였다고 한다. 현재 JAVA의 javax.sql 패키지에 포함되어 있다. 다시 설명하면, JDBC는 테이블 형식의 데이터(특히 관계형 테이터베이스) 에 접근하게 해준다. JDBC는 아래 세가지의 역할을 한다. 1. datasource에 연결해준다. 2. 쿼리를 보내고, 명령문을 데이터베이스에 업데이트해준다. 3. 우리가 보낸 쿼리를 데이터 베이스가 처리하고 그에 대한 처리결과를 알려준다. 다음 짦은 예시가 소개한 세가지를..
컬렉션을 쓰는 이유 오늘은 컬렉션에 대해서 알아보겠다. 그러려면 우선 Collection이 뭔지부터 알아보자. 오늘도 equals 포스팅과 같이 내가 궁금했던 점들을 물음표 형식으로 풀어나갈 것이다. Collection이 뭔가? 단순히 말하자면 데이터 묶음이다. 그냥 단순한 데이터 묶음은 아니고, 데이터를 저장하고, 검색하고 처리한다. 그럼 Collection Framework는 뭐지? 효과적으로 데이터를 처리하기 위한 통일된 아키텍쳐라고 볼 수 있다. 데이터를 저장하는 자료구조와 데이터를 처리하는 알고리즘을 아래 구성요소로 제공해준다. 모든 collection framework은 다음과 같이 구성되어 있다. Interfaces: 컬렉션을 표현하는 추상적인 데이터 타입이다. 자체적으로 데이터가 처리되는 컬렉션들이 이 안에 ..
equals와 hashcode는 왜쓰는거지? 오늘은 java Object의 메소드 equals와 hashcode에 대해서 알아보겠다. 1. Equals()는 뭐하는 메서드인가? 이름에서부터 눈치챘겠지만 매개변수로 들어오는 객체와 자신의 객체가 같은지 비교하는 기능을 한다. Object의 메서드 구현부를 살펴보자. 오.. 별거 없다. 그냥 같은 참조값인지 비교한다. 참조변수 두개를 '==' 연산자로 비교하면 참조값이 같은지의 여부를 반환한다. 이렇게 우리가 만드는 객체에서 equals를 사용하면 기본으로 참조가 같은지의 결과값을 반환하게 된다. 하지만 난 참조값 같은지보다 객체의 필드가 모두 같으면 같은 객체로 보고 싶은데? 그럼 오버라이딩으로 해당 객체에 맞게 구현하면 된다. class Person { String name; int age; pub..
[프로그래머스/파이썬] 배달 처음 이 문제를 보자마자 이건 딕셔너리에 {출발지: [(도착지, 시간), (도착지, 시간), ...], 출발지: [...], ...} 이런식으로 우선 풀어서, 재귀로 누적 시간을 잰다음 K보다 시간이 작은지 체크하고 list에 넣어야겠다 라고 생각하고 이렇게 풀었다. def solution(N, road, K): towns = [500000] * (N+1) graph = collections.defaultdict(list) for r in road: a, b, time = r graph[a].append((b, time)) graph[b].append((a, time)) def go_delivery(visited: list, arrive: int, time: int): for a, t in graph[v..
[프로그래머스] 네트워크 언어: python3 문제유형: DFS/BFS 내가 푼 답안 import collections def solution(n, computers): answer = 0 visited = [] def connect(start): queue = collections.deque() queue.append(start) while queue: num = queue.popleft() visited.append(num) queue += [i for i, c in enumerate(computers[num]) if c == 1 and i not in visited] for com in range(n): if com not in visited: answer += 1 connect(com) return answer
[JPA] 데이터베이스 스키마 자동생성 JPA의 설정 옵션 중에 hibernate.hbm2ddl.auto 라는 것이 있다. 이게 무슨 설정이나면 JPA에서 제공하고 있는 애노테이션으로 매핑이 되어있는 테이블들을 데이터베이스 방언(dialect)을 활용하여 애플리케이션 실행시점에 자동으로 DB에 생성해주는 것이다. 옵션 설명 create 기존테이블 삭제 후 다시 생성 (DROP + CREATE) create-drop create와 같으나 종료시점에 테이블 DROP update 변경분만 반영(운영DB에는 사용하면 안됨) validate 엔티티와 테이블이 정상 매핑되었는지만 확인 none 사용하지 않음 이제 이 옵션들을 하나하나 어떻게 실행되는지 확인해보겠다. 예제를 간단히 하기 위해 Member, Item 객체만 생성하여 돌려보았다. create..
Maven Scopes? Gradle Configurations? 대부분의 내용은 reflectoring.io/maven-scopes-gradle-configurations/ 개인적으로 의미를 해석한 것입니다. 빌드 툴은 의존성(dependency)을 관리한다. 우리가 어떠한 라이브러리를 프로젝트에서 사용하고 싶을 때 선언만 하면, 빌드 툴은 이 라이브러리를 다운받아서 build 라이프 사이클의 적절한 시점에서 classpath에 추가해준다. (빌드 라이프사이클 - kwonnam.pe.kr/wiki/gradle/buildlifecycle 참고) 오랜시간동안 Maven이 널리 사용되고 있었다. 안정적이고, Java 커뮤니티에서 많이 사용되어 오고 있기 때문이다. 그러던 중 Gradle이 Maven의 대안법으로 등장했고, dependency를 선언하는데 있어 보다 유연한 ..
[junit test] No tests found for given includes 개발환경 java: 1.8 spring: 2.2.5.RELEASE build tools: gradle 4.10.2 junit: junit5 idea: intellij Spring test를 하기 전 기본 테스트메서드를 실행해보았다. 그럼 아래와 같은 에러메시지가 나온다. 에러메시지대로 검색하니 2가지 방법이 있었다. 첫번째 방법은 Settings → Build, Execution, Deployment → Build Tools → Gradle →Run tests using 에서 IntelliJ IDEA 변경 두번째 방법은 build.gradle에서 아래의 코드를 추가해주면 된다. test { useJUnitPlatform() } 나는 후자의 방법으로 했다. 해결! 참고 stackoverflow.com/qu..
[백준 10989번] 수 정렬하기 3 (Python) 문제 풀이 어떻게 풀어야할까 고민하던 중 힌트가 이미 나왔다. 카운팅 정렬을 이용하면 풀 수 있다는 것이다. 그래서 아래와 같이 풀었다. import sys # 입력받기 input = sys.stdin.readline n = int(input()) input_array = list() for _ in range(n): input_array.append(int(input())) # 카운팅 배열 선언 counting_array = [0] * (max(input_array)+1) for num in input_array: counting_array[num] += 1 # 카운팅 직전 개수 더하기 for i in range(1, len(counting_array)): counting_array[i] += coun..