본문 바로가기

분류 전체보기510

키(Key) 의 종류에 대해 알아보자 키는 릴레이션(테이블)에서 투플(행)을 구별하는 역할을 하는 속성 또는 속성의 집합을 의미합니다. 키에는 다양한 종류가 있습니다. 데이터베이스 개론이라는 책에서는 관계형 데이터베이스의 키를 5가지로 나누었지만, 추가적으로 같은 의미로 불리는 자연키와 대리키가 있습니다. 후보키 = 자연키 / 기본키 = 대리키 종류 의미 예시 슈퍼키 유일성을 만족하는 속성 고객아이디 + 고객이름 후보키 유일성과 최소성을 만족하는 속성 고객아이디 기본키 후보키 중에서 기본적으로 사용하기 위해 선택한 키 Auto_Increment 대체키 기본키로 선택되지 못한 후보키 고객이름, 주소 외래키 다른 릴레이션의 기본키를 참조하는 속성 고객테이블(고객아이디) -> 주문테이블(주문고객) 가장 중요시 되는 키는 기본키(=대리키) 라고 생.. 2023. 2. 19.
Service 인터페이스는 거의 사용하지 않는다. 프로젝트를 하다보면 다양한 인터페이스를 만들고 인터페이스를 구현하는 형식으로 진행하는 경우가 많습니다. 이전 프로젝트에서는 Service 를 모두 인터페이스로 먼저 생성하고 구현을 진행을 했습니다. 전략패턴이라는 것을 배우면서 갈아끼우는 것이 미래에도 굉장히 좋은 선택이다 라고 생각해 무지성으로 작성했던 것 같습니다. 아래처럼 서비스 인터페이스를 만들고 구현 클래스를 따로 만들어서 로직을 구현했습니다. 막상 작성해보니, 일단 DI 를 사용할 일이 없었고, 작성할 코드량이 많아졌으며 메서드 네이밍이나 매개변수의 타입 등을 변경할 때 인터페이스에서도 고쳐야하는 번거로움이 생겼습니다. 그 중에 장점을 하나 뽑자면, 개인적으로는 메서드(어떤 기능을 하는지) 를 한눈에 볼 수 있다는 점이 있었습니다. public.. 2023. 2. 19.
릴레이션(테이블)의 특징 4가지 관계형 데이터베이스 테이블에는 4가지의 중요한 특성이 있습니다. 기본적으로 해당 특성들을 만족해야 테이블이 릴레이션으로 인정받을 수 있습니다. 투플 : 행 릴레이션 : 테이블 1. 투플의 유일성 하나의 테이블에는 동일한 투플이 존재할 수 없습니다. 똑같은 투플인지는 테이블을 보고 확인할 수 있지만, 많은 속성이 있다면 비효율적인 방법입니다. 보통은 키 값을 설정해서 동일한 데이터가 DB 에 있을 경우, 중복되었다는 메세지를 내려주는 방법을 사용합니다. 예를 들어, 회원가입을 할 때 회원 아이디가 중복되었다는 것을 예시로 들 수 있습니다. 2. 투플의 무순서 하나의 테이블에서 투플 사이의 순서는 무의미 합니다. 서로 다른 투플은 순서가 상관없습니다. 데이터베이스는 위치가 아닌 내용으로 검색되기 때문입니다... 2023. 2. 15.
스트림의 중간, 최종연산 스트림의 연산에 대해 알아보겠습니다. 프로젝트를 진행할 때, for 문과 같은 코드를 Stream 으로 리팩토링을 했는데, 자바의 정석 강의를 통해 다시 한번 정리해보고자 합니다. 자바8 이후 Stream 을 사용할 수 있게 되면서, 길고 복잡했던 코드를 단순하고 가독성 좋게 사용할 수 있기 때문에, 낯설더라도 프로젝트에 적용하면 빠르게 배울 수 있을 거 같습니다. 먼저 어떠한 종류가 있는지 확인해보겠습니다. 기본적인 메서드만 정리했으며, 많은 메서드가 있습니다. 중간 연산은 0~n 개를 사용할 수 있습니다. 중간 연산 설명 Stream distinct() 종복제거 Stream filter( 조건식 ) 조건에 안맞는 요소는 제외 Stream limit() 스트림의 일부를 잘라내기 Stream skip().. 2023. 2. 15.
스트림(Stream) 의 특징 스트림은 컬렉션이나 배열의 다양한 데이터 소스를 표준화된 방법으로 다루기 위한 것입니다. 데이터소스를 추상화하고 데이터를 다루는데 자주 사용되는 메서드 들이 정의되어 있습니다. 스트림을 이용하는 방법은 보통 3단계로 이루어집니다. 1. 스트림 만들기 2. 중간 연산 n 번 3. 최종 연산 1번 스트림의 특징을 알아보겠습니다 1. 스트림은 데이터 소스로부터 데이터를 읽기만할 뿐 변경하지 않습니다. public class StreamEx_1 { public static void main(String[] args) { List list = Arrays.asList(3, 1, 5, 4, 2); List stream = list.stream().sorted().collect(toList()); System.out.. 2023. 2. 13.
람다식과 함수형 인터페이스 람다식은 메서드를 하나의 식(expression) 으로 표현하는 것을 의미합니다. 또한 람다식은 익명 함수, 익명 객체 라고도 하는데, 자바에서는 함수와 메서드를 같은 의미로 사용합니다. 람다식의 작성법은 아래와 같습니다. 반환타입 메서드이름 (매개변수 선언) -> { ... } 기초적인 예시를 들어보겠습니다. 예시는 자바의 정석을 참고했습니다. int max(int a, int b) { return a > b ? a : b; } //변환 (a , b) -> a > b ? a : b int person(String name, int i) { System.out.println(name + "=" + i); } // 변환 (name , i) -> System.out.println(name+ "=" + i);.. 2023. 2. 13.
쓰레드 동기화(Synchronization) 멀티 쓰레드 프로세스는 다른 쓰레드의 작업에 영향을 미칠 수 있습니다. 진행 중인 작업이 다른 쓰레드에게 간섭받지 않게 하려면 동기화 작업이 필요합니다. 동기화는 한 쓰레드가 진행중인 작업을 다른 쓰레드가 간섭하지 못하도록 막는 것을 의미합니다. 동시에 접근하고 공유되는 자원에서 문제가 발생하지 않도록 보장해줘야 하는 임계영역은 락(Lock) 을 얻은 단 하나의 쓰레드만 출입이 가능합니다. 락은 객체마다 1개씩 가지고 있습니다. 임계영역을 보장해주기 위한 방법은 뮤텍스와 세마포어가 있습니다. https://josteady.tistory.com/557 [CS] 뮤텍스(Mutex) 세마포어(Semaphore) 란? 먼저 임계영역은 무엇인가? 임계영역(Critical Section) 이란? 동시접근, 공유되는.. 2023. 2. 13.
Thread.sleep() 과 interrupted() 쓰레드를 일정시간동안 멈추게(잠들게) 할 수 있는 sleep() 메서드에 대해 알아보겠습니다. static void sleep (long millis) static void sleep (long millis , int nanos) 먼저 static 메서드라는 것을 잘 인지하고 있어야 합니다. sleep 은 자기 자신만을 멈추게 할 수 있습니다. 또한, 예외처리(InterruptedException) 을 필수처리 해야합니다. 어떠한 문제가 생겨서 예외를 던지는 것이 아닌, 멈춘 도중에 time up 이나 interrupted로 깨우면 해당 예외와 try - catch 문을 이용해서 잠자는 상태를 벗어나는 것입니다. try { Thread.sleep(1000); } catch (InterruptedExcep.. 2023. 2. 12.
쓰레드(Thread) 는 무엇일까? 프로세스는 프로그램을 실행 한 것을 의미합니다. 프로세스의 자원을 이용해서 실제로 작업을 수행하는 것을 쓰레드 라고 합니다. 모든 프로세스에는 1개 이상의 쓰레드가 존재하며, 둘 이상의 쓰레드를 가진 프로세스를 멀티쓰레드 프로세스라고 합니다. 멀티 쓰레드를 사용하면 하나의 프로세스에서 여러가지 작업을 동시에 진행할 수 있어 효율적으로 사용할 수 있습니다. 자바는 멀티쓰레드를 지원하므로, 고비용의 프로세스를 추가시키는 보다 멀티 쓰레드를 이용할 수 있습니다. 멀티쓰레드의 장점은 아래와 같습니다. 1. CPU의 사용율을 향상시킨다 2. 자원을 효율적으로 사용할 수 있다. 3. 사용자에 대한 응답성이 향상된다. ex) 채팅프로그램에서 파일전송을 할때 보내면서 채팅을 할 수 있다. 4. 작업이 분리되어 코드가 .. 2023. 2. 12.