일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- @Spring
- C
- designpattern
- 자료구조
- springboot
- 10951
- @NotEmpty
- gradle
- Spring
- 디자인패턴
- 쉬운 계단 수
- 여러인수
- createQuery
- 전치행렬 #C
- 10844
- @ModelAttribute
- setParameter
- decorator
- Linux
- 데코레이터패턴
- 백준
- mycp
- pscp
- java
- NamedParameterNotBound
- BubbleSorting
- 숫자야구
- 점세개
- 자바
- junit
- Today
- Total
목록CS (9)
...

Make 도구는 리눅스에서 여러 파일들을 관리 해주는 도구이다. 이를 이용함으로써 개발자는 여러 파일들을 쉽게 묶을 수 있고, 반복되는 컴파일을 자동화 할 수 있으며, 모듈화 프로그래밍을 쉽게 구현할 수 있게 된다. 이제 Make 도구를 어떻게 활용할 수 있는지 예시를 살펴 보도록 한다. 정말정말 간단한 계산 프로그램을 구현 하도록 한다. add/ sub 두 가지 연산을 모듈화 프로그래밍을 통해 Makefile을 이용해 구현해 볼 것이다. 일단 헤더 파일과 헤더 파일의 메소드를 구현한 공용 C파일 하나를 구현해 주었다. 이 두 파일은 Add 프로그램에도 이용되고, Sub 프로그램에도 이용될 것이다. //Header.h #ifndef MAKEHEADER_H #define MAKEHEADER_H void P..
[ MyShell 구현 ] 리눅스 터미널에서 명령어를 받아 처리한 후 결과를 출력하는 Shell 프로그램의 구현 [ 프로그램 구현 흐름 ] 1. 현재 디렉토리 name 출력하기 2. 사용자로부터 명령어 입력 받아오기 3. 명령어 토큰화 하기 (단어별로 나누기) 4. 프로세스 fork하여 자식 생성하기 5. 부모 프로세스가 wait 하는 동안 자식 프로세스 동작(명령어 실행) 6. exit 입력시 Shell 중단 [ 구현 전 알아야 하는 부분 ] shell 프로그램을 구현할 때 반드시 알고 있어야 할 부분은 리눅스의 명령어는 내부 명령어와 외부 명령어로 나누어져 있다는 점이다. 외부 명령어는 자식 프로세스의 exec 시스템 콜에 의하여 모두 처리 가능하다. 보통 대부분의 명령어들이 외부 명령어이다. 하지만..

데코레이터 패턴이란 , 주어진 상황 및 용도에 따라 어떤 객체에 책임을 덧붙이는 패턴으로, 기능 확장이 필요할 때 서브클래싱 대신 쓸 수 있는 유연한 대안이 될 수 있다. [위키 백과] 쉽게 정리하면, 기본 객체에 추가적인 기능을 유연하게 첨가하는 패턴이다. 기본 객체를 변경 없이 기본 객체를 꾸며주는 것이다. [ 데코레이터 패턴의 장점 ] [1] 위임을 통해 새로운 행동을 유연하게 추가할 수 있다. [2] 기존 코드의 수정 없이도 손쉽게 기능을 확장할 수 있다. 피자를 한 번 생각해보자. 피자 도우가 있다고 하자. 피자의 도우는 기본 객체가 된다. 그리고 이 위에 여러 개의 토핑들을 추가할 것이다. 토핑은 기능이라고 생각하자. 피자의 도우 위에 사용자가 추가로 하는 토핑들을 차례로 얹을 것이다. 페페로..

옵저버 패턴이란, 객체의 상태 변화를 관찰하는 관찰자들, 즉 옵저버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴이다. [위키 백과] 즉, 옵저버 패턴을 이용하면 별도의 함수 호출 없이 자동적으로 다른 객체의 상태 변화를 알 수 있다. [ 옵저버 패턴의 장점 ] [1] 객체와 옵저버 객체 사이의 연결이 매우 느슨하다. 맺고 끊기 쉬우며 서로가 서로에게 많은 영향을 주지 않는다. 따라서 시스템이 유연해지며 객체 간의 의존성을 제거할 수 있다. [2] 실시간으로 변경 사항을 옵저버들에게 전달할 수 있다. 예시를 들어서 설명해 보자. 어느 회사에 부서원 A,B,C가 있다고 하자. 부서원들은 회사 내부의 변경 사항이 생길 때마..

어댑터란 무엇일까? 물리적인 의미로 이야기 하자면, 다른 전기나 기계 장치를 서로 연결해서 작동할 수 있도록 만들어주는 결합 도구이다. 예시로 이야기 하자. 충전 단자 부분이 USB 형식인 애플 충전 케이블이 있을 때, USB 포트 부분을 전원 소켓과 연결할 수 있도록 하는 통로 역할을 해주는 것이 어댑터(Adapter)이다. 이를 디자인 패턴, 프로그래밍과 연관 시켜 보자. 기존에 사용하던 A 인터페이스가 있고, 추가적으로 외부에서 들어온 B 인터페이스가 있다. 이를 연결하려면 인터페이스 2개 중 하나를 대폭 수정하여야 할 것이다. 서로의 형식에 맞추어야 하기 때문이다. 이런 경우 두 인터페이스 중 어떤 코드도 변경하지 않고 사용 가능하도록 한 것이 어댑터 패턴이다. 어댑터 패턴의 class diagr..

Copy program 원본 파일의 내용을 새로운 파일에 복사 하기 Code //전처리 //main -> input 파일 디스크립터, output 파일 디스크립터 설정 ->argv[1]로 받아온 원본 파일을 파일 디스크립터에 할당함. ->fstat으로 파일의 상태 및 정보를 얻어옴 ->argv[2]로 받아온 새로운 파일을 읽고 쓰기 받아온 형태로 open 하고 파일 디스크립터에 할당함. -> MAX_BUF의 크기에 맞춰 i_fd에 있는 값을 read하여 buf 에 저장 후 o_fd에 쓰기 -> 파일 디스크립터 close

버블 정렬이란, 인접한 두 원소를 비교하여 정렬하는 알고리즘이다. 매우 단순하고 간단한 방식이지만, 시간 복잡도가 커 효율이 좋지는 않다. 그림과 같이, 인접한 두 개를 비교한다. 그리고 둘 중 더 작은 수를 왼쪽으로 정렬한다. 위와 같이 1차 작업이 끝나면 처음부터 다시 작업을 반복한다. 모든 수가 정렬될 때까지 작업은 반복적으로 계속된다. 버블 정렬 Code 화질 구지 오바다...

희소 행렬이란, 행렬의 대부분이 0을 가리키는 행렬이다. 희소 행렬의 경우 배열의 크기가 커질 수록 0이 차지하는 메모리가 많아지기 때문에 메모리의 낭비가 매우 심하다. 따라서 희소 행렬에서 0이 아닌 원소들만 따로 배열로 만들어서 정리할 수 있다. 좌측의 이미지가 바로 희소 행렬이다. 6X6 크기의 행렬에 대부분이 0으로 이루어져 있어 메모리의 낭비가 심하다. 따라서 우측과 같은 형태로 배열을 정리해주는 것이다. 쉽게 말하자면 핵심을 압축한 새로운 행렬을 만드는 것이라 할 수 있다. 우측 행렬의 행 부분은 좌측 행렬의 0이 아닌 원소의 개수와 같다. 우측 행렬의 열 부분은 차례로 0이 아닌 원소들의 행 인덱스 / 열 인덱스 / value 값이다. 즉 원래 행렬에서 0이 아닌 값들의 위치와 값을 [num..

전치 행렬이란 , 선형대수학에서 행과 열을 교환하여 얻는 행렬이다. 즉, 주대각선을 축으로 하는 반사 대칭을 가하여 얻는 행렬이다. [위키백과] 전치 행렬을 구현하는 방법 1) 초기화 되어 있는 2차원 배열 (original[m][n]) 을 준비한다. 2) original[m][n]과 행과 열의 크기가 전치된 새로운 배열을 생성 한다. (Trans[n][m]) 3) for 루프를 돌며 Trans[n][m] 에 original[m][n]값을 저장한다. 전치 행렬 Code TransMatrix 함수이다. 매개변수로 original 2차원 배열과 각 배열의 크기를 가져온다. 새로운 2차원 배열을 생성한 후 , 이중 for 문 루프를 돌며 전치 행렬의 값을 채워넣는다. Main 함수이다. 참고로 얘기하자면, 난..