전체 글 251

유용한 영어 숙어(31~33)

as easy as pie 대단히 쉬운, 식은죽 먹기로 Ex.) He said it is a difficult problem, but I don't agree. It seems as easy as pie to me! 그는 이게 어려운 문제라고 했었어. 근데 내 생각은 달라, 나한텐 아주 쉽거든! be sick and tired of ~에 진력이 나다, 진절머리가 나다. Ex.) I'm sick and tired of doing nothing but work. Let's go out tonight and have fun. 차라리 일을 하는게 낫지 아무것도 안하는건 정말 지겨워. 오늘밤 나가서 놀자 bend[lean] over backwards 무진 애를 쓰다. 안간힘을 쓰다 Ex.) He bent over..

테스트 주도 개발 : TDD(Test Driven Development)

보통의 개발 방식은 요구사항 분석 -> 설계 -> 개발 -> 테스트 -> 배포 형태의 개발 주기를 갖는데 이러한 방식은 소프트웨어 개발을 느리게 하는 잠재적 위험이 존재한다. 소비자의 요구사항이 명확하지 않을 수도 있고 소스코드의 품질이 저하될 수 있기 때문이다. 추가로 테스트 비용의 증가라는 위험성도 가지고 있다. 이러한 점 때문에 부분적으로 기능 수정을 하게 되는데 기능 수정을 함으로써 모든 부분을 테스트해야 하므로 전체적인 버그를 검출하기 어려워지는 문제가 발생한다. TDD(Test Driven Development) 기존 설계 방법과는 다르게, 테스트케이스를 먼저 작성한 후 실제 코드를 개발하는 리팩토링 절차를 밟아 실행하는 것 반복 테스트를 이용한 소프트웨어 방법론, 작은 단위의 테스트 케이스를..

클린 코드, 리팩토링

클린코드(Clean Code) 가독성이 높은 코드 얼마나 잘 읽히고 코드가 지저분하지 않고 정리된 코드인지를 보여줘야 한다. 가독성을 높이기 위해서는 다음과 같이 구현해야 한다. 네이밍이 잘 되어있어야 한다 오류 X 중복 X 의존성을 최대한 줄여야 한다. 클래스 혹은 메소드가 한 가지 일만 처리해야 한다. // 덧셈 기능 함수 public int ABC(int a, int b){ return a + b; } // 뺼셈 기능 함수 public int BAA(int a, int b){ return a - b; } // 수정 후 // 덧셈 기능 함수 public int sum(int a, int b){ return a + b; } // 뺼셈 기능 함수 public int sub(int a, int b){ re..

고정 소수점, 부동 소수점

컴퓨터에서 실수 표현하는 방법에는 고정 소수점, 부동 소수점 두가지 방식이 존재한다. 고정 소수점(Fixed Point) 소수점이 찍힐 위치를 미리 정해놓고 소수를 표현하는 방식(정수 + 소수) Ex.) -5.6888198 = -(부호) , 5(정수부), 소수부(6.888198) 3가지로 나뉨 Ex.) 7.625라는 실수 -> 2진수로 변환하면 111.101이 된다. 이것을 그대로 저장 고정 소수점 방식으로 표현하면 111.101 그대로가 되고 나머지 부분은 0으로 채운다. 장점 실수를 정수부와 소수부로 표현해 가독성이 좋다. 높은 정밀도가 필요 없는 소규모 시스템에서는 간혹 쓰인다. 단점 표현의 범위가 너무 적어서 활용하기 힘들다(정수부는 15bit, 소수부는 16bit) 부동 소수점(Floating ..

캐시 메모리

작동 원리 시간 지역성 공간 지역성 캐시 구조 및 작동 방식 캐시 성능 측정 캐시 미스가 날 경우 캐시 미스 해결 방법 속도가 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리를 말한다. 레지스터, 메인 메모리와 함께 메모리 계층 구조의 핵심 계층 중 하나이다. 데이터 지역성을 활용하여 메인 메모리에 있는 데이터를 캐시 메모리에 불러와 두고, 프로세서가 필요한 데이터를 캐시 메모리에서 먼저 찾도록 하면 시스템 성능을 향상 시킬 수 있다. CPU에서는 이러한 캐시 메모리가 2~3개 정도 사용된다(L1, L2, L3 캐시 메모리), 속도, 크기에 따라 분류한 것으로, 일반적으로 L1 캐시부터 먼저 사용된다. 작동 원리 for (i = 0; i < 10; i += 1){ arr[i]..

중앙처리장치 작동 원리

연산 장치 제어 장치 레지스터 범용 목적 레지스터 특수 목적 레지스터 CPU의 동작 과정 명령어 세트 인출 사이클 실행 사이클 데이터 이동 : LOAD addr 데이터 처리 : ADD addr 데이터 저장 : STA addr 프로그램 제어 : JUMP addr 중앙처리장치(CPU)는 크게 연산장치, 제어장치, 레지스터 3가지로 구성되어 있다. 연산 장치 산술, 논리연산을 수행한다. 산술 연산 : 덧셈, 뺄셈 논리 연산 : AND, OR , XOR 연산에 필요한 데이터를 레지스터에서 가져오고, 연산 결과를 다시 레지스터로 보낸다. 제어 장치 명령어를 순서대로 실행할 수 있도록 제어하는 장치 주기억장치에서 프로그램 명령어를 꺼내 해독하고, 그 결과에 따라 명령어 실행에 필요한 제어 신호를 기억장치, 연산장치..

퀵 정렬

정의 분할 정복 방법을 통해 주어진 배열을 정렬한다 💡분할 정복 방법이란? : 문제를 작은 2개의 문제로 분리하고 각각을 해결한 뒤 결과를 모아서 문제를 해결하는 방법 동작 과정 배열 가운데서 하나의 원소를 고른다. 이렇게 고른 원소를 피벗(pivot) 이라고 한다. 피벗 앞에는 피벗보다 값이 작은 모든 원소들이 오고, 피벗 뒤에는 피벗보다 값이 큰 모든 원소들이 오도록 피벗을 기준으로 배열을 둘로 나눈다. 이렇게 배열을 둘로 나누는 것을 분할(Divide) 이라고 한다. 분할을 마친 뒤에 피벗은 더 이상 움직이지 않는다. 분할된 두 개의 작은 배열에 대해 재귀(Recursion)적으로 이 과정을 반복한다. 재귀 호출이 한번 진행될 때마다 최소한 하나의 원소는 최종적으로 위치가 정해지므로, 이 알고리즘은..

컴퓨터의 구성

컴퓨터의 구성 하드웨어 중앙처리장치(CPU) 기억장치 입출력장치 소프트웨어 시스템 소프트웨어 응용 소프트웨어 시스템 버스 데이터 버스 주소 버스 제어 버스 컴퓨터의 구성 컴퓨터는 기본적으로 읽고 처리한 뒤 저장하는 과정으로 이루어짐 (READ → PROCESS → WRITE) 이 과정을 진행하면서 끊임없이 주기억장치(RAM)과 소통한다. 이때 운영체제가 64bit라면, CPU는 RAM으로부터 데이터를 한번에 64비트씩 읽어온다. 하드웨어(HardWare) : 컴퓨터를 구성하는 기계적 장치 소프트웨어(SoftWare): 하드웨어의 동작을 지시하고 제어하는 명령어 집합 펌웨어(FirmWare) : 하드웨어와 소프트웨어의 특성을 동시에 가지고 있으며, 다른 소프트웨어들보다 우선적으로 하드웨어의 기본적 동작을 ..

삽입 정렬

정의 2번째 원소부터 시작하여 그 앞(왼쪽)의 원소들과 비교하여 삽입할 위치를 지정한 후, 원소를 뒤로 옮기고 지정된 자리에 자료를 삽입하는 정렬 알고리즘 동작 과정 정렬은 2번째 위치(index)의 값을 temp에 저장한다. temp와 이전에 있는 원소들과 비교해 삽입해나간다. 1번으로 돌아가 다음 위치(index)의 값을 temp에 저장하고, 반복한다. Python 코드 def insert_sort(x): for i in range(1, len(x)): j = i - 1 key = x[i] while x[j] > key and j >= 0: x[j+1] = x[j] j = j - 1 x[j+1] = key return x Java 코드 void insertionSort(int[] arr) { for(..

선택 정렬

정의 해당 순서에 원소를 넣을 위치는 이미 정해져 있고, 어떤 원소를 넣을지 선택하는 알고리즘 동작 과정 주어진 배열 중에 최소값을 찾는다. 그 값을 맨 앞에 위치한 값과 교체한다. 맨 처음 위치를 뺀 나머지 배열을 같은 방법으로 교체한다. Python 코드 def selectionSort(x): length = len(x) for i in range(length-1): indexMin = i for j in range(i+1, length): if x[indexMin] > x[j]: indexMin = j x[i], x[indexMin] = x[indexMin], x[i] return x Java 코드 void selectionSort(int[] list) { int indexMin, temp; for..