일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 유니온 파인드
- compiler
- Django
- top-down
- 최단경로
- dto
- Controller
- 벨만 포드 알고리즘
- Java
- disjoint set
- 직무면접
- 기술면접
- onclick
- 음수가 포함된 최단경로
- 다익스트라
- bottom-up
- clean code
- 우선순위큐
- union-find
- 코딩테스트
- 플로이드 와샬
- 엔테크서비스
- 거쳐가는 정점
- Android Studio
- scikit-learn
- spring boot
- Python
- kmeans
- 동적계획법
- BufferedReader
- Today
- Total
목록Developer's_til (75)
춤추는 개발자
✅ Optional이란? Optional 개념 및 사용법 자바로 프로그래밍 하다보면 정의되지 않은 객체에 대해 NULL값을 고려하게 되는 경우가 발생한다. 안정적인 실행을 위해서는 NULL값을 처리해 NPE(NullPointerException)가 발생하지 않게 체크해야 한다. 단순한 코드라면 짧은 로직으로 처리할 수 있지만, 스케일이 커질 수록 고려해야할 변수가 많아지고, 그만큼 NULL 체크 로직이 길어지게 된다. 이러한 상황을 위해 Java8에서는 Optional 클래스를 도입하여 NPE를 방지할 수 있도록 도와준다. Optional는 NULL이 올 수 있는 값을 감싸는 Wrapper 클래스로, NPE가 발생하지 않도록 도와준다. Optional 클래스는 아래 예제처럼 value에 값을 저장하기 때..
✅ 컴포지트 패턴이란? 컴포지트 패턴이란, 클라이언트가 복합 객체나 단일 객체를 동일하게 취급하는 것을 목적으로 한다. 특히 컴포지트(Composite)의 의도는 트리 구조로 작성하며, 전체-부분 관계를 표현하는 것으로 전체와 부분은 동일한 인터페이스를 사용할 수 있다. [ 해당 패턴을 사용하는 경우 ] 1. 복합 객체와 단일 객체의 처리 방법이 동일한 경우, 전체-부분 관계를 정의할 수 있다. 2. 객체들 간에 계급 및 계층 구조가 있고 이를 표현해야 할 경우, 3. 대표적으로 Directory-File 관계가 존재한다. [ 구조 ] Component Leaf와 Composite가 구현해야하는 Interface로, Leaf와 Composite는 모두 Component라는 같은 타입으로 다뤄 진다. Le..
✅ 템플릿 메서드 패턴이란? 템플릿 메서드 패턴이란 특정 작업을 처리하는 일부분을 서브 클래스로 캡슐화하여 전체적인 구조는 바꾸지 않고, 특정 단계에서 수행하는 내용을 바꾸는 패턴이다. 즉, 동일한 기능을 상위 클래스에서 정의하면서 확장/수정이 필요한 부분만 서브 클래스에서 오버라이딩으로 구현하도록 만든다. 예를 들어, 전체 로직은 상위 클래스에서 구현하고, 나머지 부분은 하위 클래스에서 구현하도록 만들어서 코드의 재사용성을 높이는 것이다. [ 구조 ] [ 장단점 ] 장점 1. 코드의 재사용성을 높여 중복 코드를 줄일 수 있다. 2. 하위 클래스의 역할을 줄여 핵심 로직의 관리가 용이하다. 3. 객체지향적으로 코드를 구성할 수 있다. 단점 1. 추상 메서드가 많아지면서 클래스 관리가 복잡해진다. [ 예제..
✅ Generic 자바에서 제네릭(generic)이란, 데이터의 타입을 일반화(generalize)한다는 것을 의미한다. 쉽게 설명하자면 '데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있도록 일반화하는 방법'이다. 이렇게 컴파일 시에 미리 타입 검사를 수행하면 다음과 같은 장점이 있다. 1. 클래스나 메서드 내부에서 사용되는 객체의 타입 안정성을 높일 수 있다. 2. 반환값에 대해 타입 변환 및 타입 검사에 들어가는 노력을 줄일 수 있다. JDK 1.5 이전에서는 여러 타입을 사용하는 대부분의 클래스나 메서드에서 인수나 반환값으로 Object 타입을 사용해왔다. 하지만 반환된 Object 객체를 다시 원하는 타입으로 변환해야 하며, 이러한 상황에서 오류가 발생할 가능성도..
Stream에 이어 Java8에서 추가된 Lambda. 토비의 스프링에서 Lambda와 관련된 파트를 보면 자바에서 왜 람다를 추가했는지 알 수 있다. 바로 함수형 프로그래밍을 위해서다. 단순히 추가된 문법이 아닌 프로그래밍 자체의 패러다임에 따른 내용이 추가된 것이다. 이제 추가된 API로 문제 해결을 위한 사고를 다시 한번 생각해 볼 필요가 있다. ✅ Lambda 람다의 핵심은 코드의 간결화로 줄일 수 있는 코드는 모두 지우자는 것이다. 비교를 위해 Lambda를 쓰지 않은 방식의 코드를 살펴보겠다. public interface Danceable { void hiphop(String str); } class Street implements Danceable { @Override public void..
✅ 스케줄링의 개요 프로세스는 생성, 준비, 실행, 대기와 같은 여러 상태를 거치며 작업이 이루어진다. CPU 스케줄러는 이러한 프로세스가 생성된 후, 종료될 때까지 모든 상태 변화를 조정하는 일을 한다. 이때, CPU 스케줄러는 관리의 범주를 나누어 프로세스를 관리한다. [ 고수준 스케줄링 ] 가장 큰 틀에서 이루어지는 CPU 스케줄링으로 장기 스케줄링 또는 작업 스케줄링이라고 한다. 고수준 스케줄링은 시스템 내의 전체 작업 수를 조절하는 것을 말한다. 이 단계에서는 어떤 작업을 시스템이 받아들일지 또는 거부할지를 결정한다. 작업 요청이 오면 스케줄러가 시스템의 상황을 고려하여 작업을 승인할지, 거부할지 결정하여 승인 스케줄링이라고도 부른다. 이를 통해 동시에 실행 가능한 프로세스의 총 개수가 정해진다..
✅ 프로세스 제어 블록 프로세스를 실행하는데 필요한 중요한 정보를 보관하는 자료 구조로 TCB(Task Control Block)라고도 한다. 모든 프로세스는 고유의 프로세스 제어 블록을 가지며, 프로세스 생성 시 만들어져서 프로세스가 실행을 완료하면 폐기된다. 프로세스 제어 블록의 구성과 중요한 요소들은 아래와 같다. 포인터: 준비 상태나 대기 상태는 큐로 운영되는데, 프로세스 제어 블록을 연결하여 큐를 구현할 때 사용한다. 프로세스 상태: 생성, 준비, 실행, 대기, 보류 준비, 보류 대기 등이 있다. 프로세스가 현재 어떤 상태에 있는지를 나타낸다. 프로세스 우선순위: 프로세스의 중요도는 각각 다르다. 사용자 프로세스보다 중요도가 큰 커널 프로세스는 우선순위가 높고, 사용자 프로세스끼리 우선순위가 다..