TDD(Test- Driven Development)에 대하여
·
Programming/기타
흔히 테스트 주도 개발이라고 하는 이 개념은 짧은 개발 사이클을 반복하여 소프트웨어를 개발하는 방법론이다. 개념 자체는 이전부터 있었거나 개발되었을 수 있으나 공식적으로는 Kent Beck이라는 사람이 2003년에 개발한 것으로 알려져 있다.이 TDD에 대해서 좀 더 자세히 알아보자. TDD란 이름에서 알수 있듯 이 방법론은 테스트가 주를 이루게 된다. 흔히들 폭포수 모델이라고 하는 이 개발 방식을 한번 보자.일반적인 개발 방식은 그림처럼 요청 ->설계 -> 개발 -> 테스트 -> 배포 -> 유지보수 순으로 흘러가지만, 이 개발 방식은 다음과 같은 위험성이 있다.1. 소비자의 요청사항이 애매할 수 있다.2. 그로 인해 설계가 까다로워진다.3. 2의 원인으로 인해 테스트 비용이 증가하게 되고,4. 종합적인..
동적 연결 라이브러리 (Dynamic Linked Library)
·
Programming/기타
흔히 DLL이라고 줄여부르는 이 동적 연결 라이브러리에 대해 알기 위해서는 먼저 정적 라이브러리에 대해 알아야 한다.이 정적 라이브러리는 여러 프로그램에서 동시에 사용할 수 있는 코드와 데이터를 모아둔 일종의 서랍이라고 볼 수 있다. 정적으로 라이브러리를 만들어주면 컴파일 시 프로그램에 직접 링크되어 실행 파일의 일부가 되므로, 실행 파일이 독립적으로 동작할 수 있게 만들어준다. 그러나 정적 라이브러리는 각 프로그램에 라이브러리 코드가 포함되기 때문에, 실행 파일의 크기가 커지고, 여러 프로그램이 동일한 라이브러리를 사용할 경우 메모리에 중복된 코드가 존재하여 메모리 낭비 등의 문제점이 있다. 동적 연결 라이브러리(이하 DLL)는 프로그램이 실행되는 동안 필요한 라이브러리를 메모리에 로드하고 사용할 수 ..
의존성 주입(Dependency Injection)
·
Programming/기타
하나의 객체가 다른 객체의 의존성을 제공하는 기법.의존성은 한 객체가 다른 객체를 사용하는 경우를 말한다. 이 객체를 클라이언트와 공급자로 나눠서 보면, 의존성 주입의 목적은 클라이언트가 구체적인 지식 없이도 공급자로부터 서비스를 쉽게 공급받도록 하는 것이다. 그렇다면 어떻게 만들어야 할까? 중간에 복잡한 과정을 생략하고 클라이언트가 보는 방향에서는 서비스를 공급받으려면 버튼을 누르시오 정도로 간단하게 만들어줄 인터페이스를 사이에 끼워줘야 한다. 이러한 구조를이런 식으로 구조를 변형한다면, 클라이언트는 객체를 생성하는 구체적인 방법을 모르더라도 객체를 생성할 수 있게 된다. 예시를 하나 들어보자.여기 CoffeeMachine이라고 하는 클래스가 있다고 해보자. 이 클래스는 커피를 생성하는 메서드가 있다...
리팩토링
·
Programming/기타
리팩토링이란?일반적으로 리팩토링이라고 하면 코드 리팩토링을 의미하는데, 소프트웨어의 기능적인 측면을 그대로 유지하면서 코드의 내부 구조를 개선하는 과정을 의미한다.즉, 코드의 가독성과 유지보수성을 높이기 위해 내부 구조를 변경하는 것이라고 할 수 있다.이는 코드의 재구성이라고 할 수 있으며, 결과적으로는 소프트웨어의 품질을 높이는 데 기여한다.리팩토링은 단순히 코드를 수정하는 것이 아니라, 코드의 구조를 재조정하여 더 나은 형태로 만드는 작업이다. 왜 리팩토링이 필요한가?크게 가독성과 유지보수성을 위해서라고 말할 수 있다. 코드가 복잡해지면, 새로운 기능을 추가하거나 버그를 수정하는 데 어려움을 겪게 되는데, 리팩토링을 통해 코드의 복잡성을 줄이고, 명확한 구조를 갖추게 함으로써 개발자들이 코드를 이해하..
코드스멜
·
Programming/기타
코드스멜코드스멜이란?직역을 해보자면 냄새나는 코드라는 의미이다.사전적 정의는 개발자가 이해하지 못하거나 잠재적인 결함이  내재되어 있어 문제를 일으킬 가능성이 있는 코드를 말하는데, 운이 좋다면 한 두군데를 고치면 에러가 해결되고 정상적으로 작동하는 경우도 있지만 보통은 리팩토링을 거쳐야 하는 경우가 많다. 코드 스멜의 종류는 굉장히 다양하다. 그중 몇가지를 소개해보고자 한다. 코드스멜의 종류중복코드 (Duplicate Code)동일한 코드구조가 여러 곳에 있는 경우를 의미한다.이 경우 동일한 코드 구조를 메서드 추출 기법등을 통해 개선이 가능하다. 긴 메서드 (Long Method)메서드의 내용이 너무 긴 경우에도 문제가 될 수 있다. 어느 부분이 문제인지 알기 어렵기 때문이다.조건문 쪼개기나 메서드 ..
컴파일러
·
Programming/기타
컴파일러컴파일러란?컴파일이란 특정 프로그래밍 언어로 쓰여 있는 문서를 다른 프로그래밍 언어 혹은 컴퓨터 언어로 옮기는 과정을 의미한다. 이러한 컴파일링을 자동으로 수행해주는 소프트웨어 혹은 장치를 컴파일러라고 한다. 컴파일링 과정은 4단계로 이루어진다.1. 전처리 과정 (Pre-processor)2. 컴파일 과정3. 어셈블리 과정4. 링킹 과정 전처리전처리 과정이란 우리가 만든 코드들 중 헤더파일이나 매크로와 같은 부분들을 소스코드로 변환해주는 사전 작업이다.이 과정에서 쓸모없는 부분들을 제거하여 최적화 또한 수행한다.주석을 제거하고, 헤더파일 내부의 코드를 삽입하고, 상단의 매크로를 실제 코드로 치환하고 적용해주는 과정을 수행한다. 컴파일그 다음 컴파일 과정에서 고급 언어 (대표적으로, C++)를 저급..