CS(Computer Science) 24

써드 파티(3rd party)

하드웨어 생산자와 소프트웨어 개발자의 관계를 나타날 때 사용한다. 써드 파티는 프로그래밍을 도와주는 라이브러리를 만드는 외부 생산자를 뜻한다. 컴퓨터 제조업체 측면 자사의 컴퓨터를 위한 부가 장치나 소프트웨어가 많은 기업에서 발매되면 결과적으로 자사의 하드웨어 매상이 증가하기 때문에 특허료나 저작권료를 제 3자에게 청구하는 예는 드물고, 오히려 부가 장치나 소프트웨어의 개발을 서드파티에게 맡김으로써 서드파티를 육성하게 된다. 개발자 측면 하드웨어 생산자가 직접 소프트웨어를 개발하는 경우 : 퍼스트 파티 개발자 하드웨어 생산자인 기업과 자사간의 관계에 속한 소프트웨어 개발자 : 세컨드 파티 개발자 아무 관련없는 제 3자 소프트웨어 개발자 : 서드 파티 개발자 주로 편한 개발을 위해 플러그인이나 라이브러리 ..

다익스트라 알고리즘(Dijkstra)

그래프에서 꼭짓점 간의 최단 경로를 찾는 알고리즘 가중치가 음수를 가지면 안되고 인접한 정점으로 가는 간선중 가장 적은 비용을 가지는 간선을 택한다. 알고리즘 수행중 새로운 경로가 생기면 그 경로를 기록하고 이후에 생기는 또 다른 경로와 비교하면서 최단 경로를 탐색한다. 다익스트라 알고리즘 순서 1. 최단 거리 값은 무한대 값으로 초기화한다. for(int i = 1; i

데브옵스(DevOps)

Development + Operations의 합성어 소프트웨어 개발자와 정보기술 전문가 간의 소통, 협업 및 통합을 강조하는 개발 환경이나 문화를 말한다. 목적 소프트웨어 제품과 서비스를 빠른 시간에 개발 및 배포하는 것 제품 출시까지 걸리는 기간 단축 새로운 판의 더 낮은 실패율 복구 시 더 빠른 평균시간 장점 작업 속도가 빨라 시장 변화에 더 잘 적응하고 효율적으로 비즈니스 성과를 낼 수 있다. 새로운 기능의 릴리스와 버그 수정 속도가 빨라질수록 경쟁 우위를 차지할 수 있다. 애플리케이션 업데이트와 인프라 변경의 품질 보장을 통해 변경 사항이 제대로 안전하게 작동하는지 확인 가능하다. 개발자와 운영 부서 간의 협력을 통해 효과적인 팀을 구축 가능하다. 자동화된 규정 준수 정책, 세분화된 제어 및 구..

애자일(Agile)

좋은 것을 빠르게 취하고, 낭비 없게 만드는 다양한 방법론을 통칭해 일컫는 말이다. 일정한 주기를 가지고 계속 검토해 나가며 필요할 때마다 요구사항을 더하고 수정하여 살을 붙이면서 개발해 나가는 프로세스 모델 방식이다. 폭포수 모델과는 반대되는 개념이다. 애자일의 핵심은 협력과 피드백이다. 진행과정 계획 -> 설계(디자인) -> 개발(발전) -> 테스트 -> 검토(피드백) 계획을 세운 후 다음 단계까지 기다려서 절차대로 진행하는 폭포수 모델과는 다르게 먼저 진행 후 분석, 시험, 피드백을 통하여 개선해 나가는 진행 모델이다. 소프트웨어 측면에서 팀이라는 단어가 주는 의미를 적용시키고, 효율적인 성과를 얻기 위한 것이다. 장점 프로젝트 계획에 걸리는 시간을 최소화할 수 있다. 점진적으로 테스트할 수 있어서..

테스트 주도 개발 : 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)적으로 이 과정을 반복한다. 재귀 호출이 한번 진행될 때마다 최소한 하나의 원소는 최종적으로 위치가 정해지므로, 이 알고리즘은..