본문 바로가기

전체 글

(185)
스프링 삼각형과 설정 정보 (1) IoC/DI 스프링 삼각형과 설정 정보 스프링을 이해하기 위해 POJO [ Plain Old Java Object ]를 기반으로 스프링 삼각형이라는 IoC/DI, AOP, PSA라고 하는 3대 프로그래밍 모델에 대한 이해가 필수이다. POJO 오래된 방식의 간단한 자바 오브젝트라는 뜻으로, JAVA EE 등 중량 프레임워크들을 사용하며 해당 프레임워크에 종속된 무거운 객체를 만들게 된 것에 반발해 사용하게 된 용어이다. 쉽게 이야기하자면, 특정 기술에 종속되어 동작하는 것이 아닌 순수한 자바 객체를 이야기하는 것이다. POJO에 대해서는 다음에 자세히 살펴보도록 하자. IoC/DI : 제어의 역전/의존성 주입 프로그래밍에서의 의존성이란? 책에서 설명하기를.. 의사 코드 운전사가 자동차를 생산한다. 자동차는 내부적으로..
자바와 객체지향 4대 특성 ( 캡슐화, 상속, 추상화, 다형성 ) 객체 지향은 인간 지향이다. 기존 구조적 프로그래밍 언어는 복잡한 문제도 작은 문제로 분할해 하나씩 정복해 가다보면 해결된다는 전략이다. 즉, 구조적 프로그래밍의 "함수"는 코드를 논리적 단위로 구분하고 분할해 정복하는 것이다. 객체 지향의 출발은 '우리가 주변에서 사물을 인지하는 방식대로 프로그래밍'하는 것이다. 0과 1로 대변되는 기계에 맞춰 사고하던 방식을 버리고 현실세계를 인지하는 방식으로 프로그램을 만들기에, 객체 지향은 직관적이다. 객체 지향의 큰 그림은 아래와 같다. 세상에 존재하는 모든 것은 사물. 즉, 객체이다. 각각 사물은 고유하다. 사물은 속성을 갖는다. 사물은 행위를 한다. 사물을 하나하나 이해하기보다 사물을 분류(class)해서 이해하는 것이 인간의 인지법이다. 직립보행을 하며 말..
알고리즘: 재귀함수(6) 예제 - 멱집합 ( powerset ) 멱집합이란? S의 모든 부분집합을 원소로 하는 집합을 S의 멱집합이라 하며, P(A) 혹은 2의 S승으로 나타낸다. 만약 S의 원소 개수가 n개라면, 멱집합의 갯수는 2의 n승이다. 멱집합 예제 어떤 집합의 모든 부분집합의 집합을 멱집합이라고 함 ex ) 원소의 갯수가 n개인 집합의 모든 가능한 부분 갯수의 집합 갯수 : 2의 n승 즉, 2의 n승의 서로 다른 경우의 수가 존재함 그렇다면 크기가 n인 모든 부분 집합의 경우의 수는 어떻게 출력할 수 있을까? 예시 데이터 { a, b, c, d, e, f }의 모든 부분 집합을 나열하려면 a를 제외한 { b, c, d, e, f }의 모든 부분집합들을 나열하고 { b, c, d, e, f }의 모든 부분집합에 { a }를 추가한 집합들을 나열함 고등학교 수..
[스케쥴러] 선점형과 비선점형 스케쥴러 선점형 스케쥴러와 비선점형 스케쥴러가 명시적으로 나온 이유는 선점형 스케쥴러를 구현하는 것이 어렵기 때문이라고 한다. 그 이유를 살펴보자. 선점형 스케쥴러 ( Preemptive Scheduling ) 하나의 프로세스가 다른 프로세스를 대신해 프로세서(CPU)를 차지할 수 있으며, 시분할 시스템이 가능함 비선점형 스케쥴러 ( Non-Preemptive Scheduling) 하나의 프로세스가 끝나지 않으면, 다른 프로세스는 CPU를 사용할 수 없음. 즉, 스케쥴러가 실행되고 있는 프로세스를 선점할 수 없음. 시분할 시스템이 불가함. 선점형과 비선점형의 차이 비선점형 프로세스가 자발적으로 Blocking 상태로 들어가거나, 실행이 끝났을 때만 다른 프로세스로 교체가 가능함 첫 프로세스 실행시간이 긴 경우 응..
[운영체제] 프로세스 스케쥴링 (Process Scheduling) 스케쥴링 방법: 배치 처리 시스템, 시분할 시스템, 멀티 태스킹 프로세스를 운영 프로그램이라 생각하고 이해하면 좋음 1. 배치 처리 시스템 자료구조의 큐(Queue) 방식과 유사함 [ 선입선출: FIFO, First In First Out ] 2. 배치 처리 시스템과 시분할 시스템/멀티 프로그래밍 왜 배치 처리 시스템이 안 쓰이고, 새로운 기술이 나왔을까? 특정 프로그램의 실행 시간이 너무 오래 걸려, 다른 프로그램을 실행하는데 대기 시간이 길다는 단점이 있었음 이로 '여러 프로그램을 순차적으로 실행시킬 수 있게 해주세요!' 라는 요구사항이 발생하며 새로운 기술이 등장한 것임 예시를 들자면 MP3를 들으며 문서 작성을 하고 싶어요! --> 동시에 여러 프로그램 실행 여러 사용자가 동시에 하나의 컴퓨터를 ..
스프링디자인패턴(3) 데코레이터 패턴 - Decorator Pattern 데코레이터 패턴 [ Decorator Pattern ] Decorator는 장식자라고 보면 됩니다. 이는 해석 그대로 원본에 장식을 더하는 패턴입니다. 이는 Proxy 패턴과 구현 방법은 동일하지만, 반환 값에 장식을 입힌다는 것에 차이를 갖고 있습니다. 즉, 데코레이터 패턴을 통해 추가적 요건을 동적으로 추가하는 것입니다. 둘의 차이를 한 번 더 정리하자면 아래 표와 같습니다. 데코레이터 패턴 UML 위 그림은 데코레이터 패턴의 기본 UML입니다. 데코레이터 패턴 특징 가장 큰 특징은 메서드 호출 반환 값에 변화를 주기 위해 중간에 장식자를 두는 패턴입니다. 확장에는 열려있고, 변경에는 폐쇄적이라는 점에서 OCP 원칙과 추상화된 인터페이스에 의존한다는 점에서 DIP 원칙이 적용되어야 합니다. 즉, 디자..
[2292번] 백준 벌집 문제 - 자바 문제 접근 초기 문제 접근 최단거리라 하여 BFS [ 넓이 우선 탐색 ]법을 이용해 접근했다. 출력 값에 오류는 없었으나, 메모리 초과로 에러가 발생하였다 ㅠㅠ 타인 문제 풀이 결국 4시간 만에 참조한 타인의 풀이를 보니 숫자의 범위를 풀이에 활용하더라! 세삼 똑똑하신 분들 너무 많다 ㅠㅠ 나의 풀이 우선 BFS로 접근해야 하기에, Queue 자료구조를 이용했다. [ 최소거리라 하여 무조건 범위 탐색으로 접근해야 한다고 생각했다 😅 ] 숫자를 담는 [ number_que ]와 각 number당 count 수를 담는 [ count_que ]와 해당 범위에 접근하는 증가값을 담은 [ increase_que ]를 활용했다. 무한반복문으로 접근하며 만약 찾고자 한 값과 number_que로 poll( )한 값이..
[1316번] 백준 그룹 단어 체커 - 자바 문제 그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때문에 그룹 단어이지만, aabbbccb는 b가 떨어져서 나타나기 때문에 그룹 단어가 아니다. 단어 N개를 입력으로 받아 그룹 단어의 개수를 출력하는 프로그램을 작성하시오. 문제 해설 ccbbdd는 각 문자가 연속하여 나타나기에 이는 하나의 '그룹 단어'이다. 만약 입력되는 단어가 3개라 하였을 때, apple banana carot apple과 carot은 각 문자들이 연속하여 나타나 그룹단어이나, banana는 a가 단어 내에서 연속해서 나타나지 않아 이는 그룹단어가 아니다. 고로..