분류 전체보기240 [Java] 제네릭(Generic) 개념 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법이다. 왜 필요할까? 1. 중복되는 소스를 하나로 묶어 소스코드의 재사용성을 극대화 하기 위해서 데이터 타입별로 클래스를 생성할 필요 없이 하나의 클래스에서 데이터 타입만 바꿔 조립하듯 코드 재활용이 가능하다. 2. 객체 생성시 사용하려고 하는 데이터타입에 대한 제한을 줄 수 있다. 효과 → 컴파일 타임에 타입 체크를 하기 위함이나 타입 캐스팅(형변환)을 제거하여 프로그램 성능 향상 → 형변환이 필요없고, 타입안정성이 보장된다. extends T(상한 경계), ? super T(하한 경계), ?(와일드 카드) 데이터 타입을 제한하게 되면 얻을 수 있는 이점은 상속 관계에서 있다. 상속 관계에서 자식은 부모의 모든 것을 가져다 사용할 수 있다.. 2021. 7. 28. [Java] 자바 가상 머신(Java Virtual Machine) JVM(Java Virtual Machine) Java로 개발한 프로그램을 실행하기 위한 가상머신. 자바 가상 머신을 뜻하는 말로 바이트코드를 실행하는 주체이다. 운영체제 위에서 동작하므로 플랫폼에 독립적으로 Java 프로그램을 실행할 수 있다. 프로그램 메모리를 관리하고 최적화하는 것 물리적인 실제의 기계가 아니라 추상적인 장치이다. 자바 애플리케이션을 클래스 로더(Class Loader)를 통해 읽어 들여서 자바 API와 함께 실행하는 것 자바 코드를 실행하기 위해서는 자바에서 javac 명령을 통해 바이트코드(.class)를 만들고, 바이트코드를 JVM이 인터프리터 방식으로 기계어로 번역하며 실행한다. JVM 구성요소 1. Class Loader JVM은 런타임시에 처음으로 클래스를 참조할 때 해당.. 2021. 7. 28. [SQL] Leetcode | 178. Rank Scores 178. Rank Scores Medium Rank Scores - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 순위 함수 DENSE_RANK() select score, `rank` from ( select score, DENSE_RANK() over (order by Score desc) as `rank` from Scores ) score_rank order by `rank`; 176 Second Highest Salary 를 풀고 나니 쉽게 풀 수 있던.. 2021. 7. 8. [SQL] Leetcode | 176. Second Highest Salary 176. Second Highest Salary Easy Second Highest Salary - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 문제 접근 두 번째로 높은 급여를 출력하는 문제였다. 문제는... 사람이 2명 미만일 때 null을 반환해야 한다. 처음 접근 했던 방법은 limit, offset 이었는데, 이 구문으로는 빈 배열을 반환한다. null을 반환하려면 함수를 거쳐야 하나..? null 다루는 방법을 못찾고 Discuss 탭에서 다른 방법.. 2021. 7. 7. [OS] 상호배제 방법 : 뮤텍스, 세마포어, 모니터 상호 배제(mutual exclusion) 멀티 프로그래밍에서 공유 불가능한 자원의 동시 사용을 피하기 위해 사용되는 알고리즘으로, 임계 구역으로 불리는 코드 영역에 의해 구현된다. = 하나의 프로세스가 공유 자원을 사용할 때 다른 프로세스의 접근을 막는 것이다. 데커 알고리즘, 피커슨 알고리즘, 제과점 알고리즘 상호배제는 교착상태의 4가지 필요조건 중 하나이다. 1. 상호배제 - 배타적 통제권(동시 사용 불가) 2. 점유대기 - 할당된 자원을 가진 상태에서 다른 자원을 기다림 3. 비선점 - 자원을 뺏을 수 없음 4. 순환대기 - 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 갖고 있음 교착 상태와 기아 상태가 발생할 수 있다. 교착 상태(Deadlock) : 무한 대기 기아 상태(Starv.. 2021. 5. 2. [OS] 프로세스 간 통신 방법(Inter Process Communication, IPC) 개념 프로세스들 간의 의사소통하는 것을 IPC라고 한다. 프로세스가 통신 가능하다는 것은 서로 다른 프로세스가 데이터를 주고 받을 수 있다는 것이며, 동시에 접근 가능한 메모리 즉, 프로세스들이 공유하는 메모리가 필요하다는 뜻이다. 따라서 컴퓨터 내부에서 보다 효율적으로 정보를 주고 받기 위한 통신의 일종이라고 생각하면 되고, 인터넷 통신을 IPC의 확장으로 이해할 수 있다. (프로세스간 통신이 서버-클라이언트 간 통신과 유사하기 때문) 프로세스간 통신을 위해 '파이프'와 같은 개념이 등장하게 되었다. 💡 스레드 간 통신보다 프로세스 간 통신이 어려운 이유 프로세스와 스레드의 차이를 알고 있다면 이해하기 쉽다. 우리는 fork와 같은 함수로 프로세스를 pthread_create와 같은 함수로 쓰레드를 각.. 2021. 5. 2. [DB] 트랜잭션 전파 설정 개념 Spring에서 사용하는 '@Transactional'은 해당 메서드를 하나의 트랜잭션 안에서 진행할 수 있도록 만들어주는 역할을 한다. 이때 트랜잭션 내부에서 트랜잭션을 또 호출한다면 새로운 트랜잭션이 생성될 수도 있고, 이미 트랜잭션이 있다면 부모 트랜잭션에 합류할 수도 있다. 진행되고 있는 트랜잭션에서 다른 트랜잭션이 호출될 때 어떻게 처리할지 정하는 것을 '트랜잭션 전파 설정'이라 한다. 전파 설정 옵션 트랜잭션의 전파 설정은 '@Transactional'의 옵션 'propagation'을 통해 설정할 수 있다. REQUIRED (기본값) 부모 트랜잭션이 존재한다면 부모 트랜잭션으로 합류 부모 트랜잭션이 존재하지 않으면 새로운 트랜잭션을 생성 중간에 롤백이 발생한다면 모두 하나의 트랜잭션이기.. 2021. 5. 2. [Design Pattern] 어댑터 패턴(Adapter Pattern) 개념 인터페이스의 불일치를 해결해서 클라이언트가 요구하는 인터페이스를 제공하는 것. 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 동작하도록 해준다. 클라이언트에서 어댑터를 사용하는 방법 클라이언트에서 타겟 인터페이스를 사용하여 메소드를 호출함으로써 어댑터에 요청을 한다. 어댑터에서는 어댑티 인터페이스를 사용하여 그 요청을 어댑티에 대한 하나 이상의 메소드를 호출로 변환한다. 클라이언트에서는 호출 결과를 받긴 하지만 중간에 어댑터가 껴 있는지는 전혀 알지 못한다. 장점 인터페이스 불일치 해결 클라이언트와 구현된 인터페이스를 분리시킬 수 있다. 향후 인터페이스가 바뀌더라도 변경 내역은 어댑터에 캡슐화되기 때문에 클라이언트는 바뀔 필요가 없다. 종류 객체 어댑터 이미 존재하는 객체의 .. 2021. 5. 2. [Spring] DI(Dependency Injection) 개념 DI는 Dependency Injection 의존관계 주입이라는 뜻으로 객체지향 프로그래밍에서 통용되는 개념이다. '객체를 주입받는다'는 것은 외부에서 생성된 객체를 인터페이스를 통해 넘겨받는 것이다. 객체를 스스로 만드는 것이 아니라 제어권을 (스프링에) 위임하여 (스프링이) 만들어 놓은 객체를 넘겨 받는 것이다. 이렇게 하면 결합도를 낮출 수 있고, 런타임시에 의존관계가 결정되기 때문에 유연한 구조를 가진다. SOLID 원칙에서 O 에 해당하는 Open Closed Principle 을 지키기 위해서 디자인 패턴 중 전략패턴을 사용하게 되는데, 생성자 주입을 사용하게 되면 전략패턴을 사용하게 된다. OCP : 개방 폐쇄 원칙 확장에는 열려있고, 수정에는 닫혀있어야 한다. 의존관계 주입에는 크게 .. 2021. 5. 2. 이전 1 2 3 4 5 6 7 8 ··· 27 다음