템플릿 메소드 패턴(Template Method Pattern)이란? 템플릿 메소드 패턴이란 특정 작업을 처리하는 일부분을 서브 클래스로 캡슐화하여 전체적인 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내용을 바꾸는 패턴입니다. 디자인 패턴이라고 하기도 뭐할정도로 객체지향 언어로 개발을 하다보면 무의식적으로 사용하는 패턴입니다. 주로 개발을 하다보면 구체적인 구현은 다르지만 기본적인 기능은 비슷한 경우가 종종 있습니다. 예를 들면 HTTP와 SMTP Client 프로그램의 경우, 주고받는 메시지의 내용이 서로 다를 뿐 둘 다 인터넷 프로토콜을 이용하여 서버에게 요청을 전달하고 결과를 수신한다는 점에서 동일합니다. 이처럼 두개 이상의 프로그램이 기본적으로 동일한 골격 하에서 동작할때 기본 골격에 해당하는..
프록시 패턴이란? 프록시는 대리인이라는 뜻으로, 무엇인가를 대신 처리하는 의미입니다. 일종의 비서라고 생각하시면 됩니다. 사장님한테 사소한 질문을 하기보다는 비서한테 먼저 물어보는 개념이라고 생각할 수 있겠습니다. 이렇게 어떤 객체를 사용하고자 할때, 객체를 직접적으로 참조 하는것이 아니라, 해당 객체를 대행(대리, proxy)하는 객체를 통해 대상객체에 접근하는 방식을 사용하면 해당 객체가 메모리에 존재하지 않아도 기본적인 정보를 참조하거나 설정할 수 있고 또한 실제 객체의 기능이 반드시 필요한 시점까지 객체의 생성을 미룰 수 있습니다. 예를 들어 용량이 큰 이미지와 글이 같이 있는 문서를 모니터 화면에 띄운다고 가정하였을때 이미지 파일은 용량이 크고 텍스트는 용량이 작아서 텍스트는 빠르게 나타나지만 ..
옵저버 패턴(Observer Pattern)이란? 옵저버패턴이란 객체의 상태 변화를 관찰하는 관찰자들, 즉 옵저버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴입니다. 어떤 객체의 변경 사항이 발생하였을때 이와 연관된 객체들에게 알려주는 디자인 패턴이라고 생각하시면 됩니다. 옵저버 패턴에는 주체 객체와 상태의 변경을 알아야 하는 관찰 객체(Observer Object)가 존재하며 이들의 관계는 1:1이 될 수도 있고 1:N이 될 수도 있습니다. 옵저버 패턴의 장단점 장점 1. 실시간으로 한 객체의 변경사항을 다른 객체에 전파할 수 있습니다. 2. 느슨한 결합으로 시스템이 유연하고 객체간의 의존성을 제거할 수 있다. 단점..
싱글톤 패턴(Singleton Pattern)이란? 싱글톤 패턴은 객체를 딱 하나만 생성하여 생성된 객체를 프로그램 어디에서나 접근하여 사용할 수 있도록 하는 패턴을 말합니다. 개발을 하다 보면 전역적으로 하나의 객체만을 사용해야 하는 경우가 종종 있습니다. 하지만 특별히 제한을 걸어두지 않는다면 객체들이 여러 개로 복제되는 경우가 생길 수 있겠죠. 싱글톤 패턴을 사용하면 객체 생성을 단 한 번으로 제한하여 객체들이 복제되는 경우를 방지할 수 있습니다. 또한 클래스를 사용하는 여러 곳에서 인스턴스를 계속 생성하여 불필요하게 메모리 낭비를 유발할 수 있다고 판단되는 경우에도 싱글톤 패턴을 사용할 수 있습니다. 싱글톤 패턴의 장점 1. 메모리 낭비를 방지할 수 있다. 2. 싱글톤으로 만들어진 클래스와 다른 ..
소프트웨어 디자인 패턴이란? 소프트웨어 개발 방법으로 사용되는 디자인패턴(Desigin Pattern)은 과거의 소프트웨어 개발 과정에서 발견된 설계의 노하우를 축적하여 그 방법에 이름을 붙여서 이후에 재사용하기 좋은 형태로 특정 규약을 만들어서 정리한 것입니다. 디자인 패턴은 소프트웨어 설계에 있어 공통적인 문제들에 대한 표준적인 해법과 작명법을 제안하며, 알고리즘과 같이 프로그램 코드로 바로 변환될 수 있는 형태는 아니지만, 특정한 상황에서 구조적인 문제를 해결하는 방식입니다. 즉 "효율적인 코드를 만들기 위한 방법론"이라고 생각하시면 됩니다. 디자인 패턴은 외우기보다는 어떠한 패턴이 있는지 알고 수많은 디자인 패턴에서 다양한 코딩 노하우를 습득하는것이 중요하다고 생각합니다. "이 코드에는 무조건 이..
이중 연결 리스트 이번 포스팅에서는 더블 링크드 리스트라고도 하는 이중 연결 리스트에 대해서 알아보고 실제로 구현해보려고 합니다.이중 연결 리스트에는 prev, next라는 이전과 다음 노드를 가리키는 포인터를 가지고 있는 연결 리스트를 말합니다. prev라는 이전 노드를 가리키는 포인터, next라는 다음 노드를 가리키는 포인터를 갖고 있기 때문에 양쪽으로 탐색이 가능하다는 장점이 있습니다. 이중 연결 리스트는 Head라는 처음을 의미하는 노드와 Tail이라는 마지막을 의미하는 노드를 가지고 있습니다. 이것을 시작과 끝으로 노드들을 추가하고 삭제하게 됩니다. 노드 추가 노드의 추가는 기존의 마지막 노드와 Tail과의 연결을 끊고 새로운 노드를 추가하여 기존 노드의 Next를 새로운 노드의 Prev에 연..
길이의 단위가 워낙 많아 단위를 외우기가 힘들어 포스팅 기록으로 남겨놓습니다. 가장 많이 사용하는 길이 단위 밀리미터(millimeter) : 국제단위계의 길이 단위로 1미터의 1,000분의 1에 해당하는 길이 단위입니다. 센티미터(centimeter) : CGS 단위계의 기본 단위로 1미터의 100분의 1에 해당하는 길이 단위입니다. 미터(meter) : 길이나 거리의 국제단위로 진공에서 빛이 299,792,458분의 1초 동안 진행한 거리로 정의되어 있습니다. 기이러한 정의는 최근에 측정 기술이 길이와 단위를 매우 높은 정확도로 재현할 수 있게 되면서 제안된 것으로, 시간의 경우에는 1013의 정확도로 재현할 수 있습니다. 킬로미터(kilometer) : 미터법에서 길이의 단위로 1,000미터와 같습..
초에도 단위가 있습니다. 밀리초, 마이크로초, 나노초, 피코초, 펨토초, 아토초가 그 단위들입니다. 흔히 미세한 시간의 단위들을 극 미세시간이라고 하며 밀리초(1000분의 1), 마이크로(100만분의 1), 나노(10억분의 1), 피코(1조분의 1), 펨토(1,000조분의 1), 아토(100경분의 1)로 극미세 세계의 단위로까지 시간을 나눌 수 있습니다. 너무나도 미세한 단위들이라 숫자들이 너무 커 외우기가 너무 힘들어 이렇게 포스팅 기록으로 남겨놓습니다. 밀리초(millisecond) 밀리초 (millisecond)는 시간의 단위로 1,000분의 1초. 물리나 공학 분야에서는 통상 msec, 또는 ㎳라고 쓰입니다. 컴퓨터 내부의 논리 회로(logic circuit) 등은 상당히 고속으로 작동하지만, 보..
보수란 보수는 보충을 해주는 수를 의미합니다. 현재의 숫자에서 자릿수가 1단계 올라갈 수 있는 수가 몇인지를 구하시면 됩니다. 보수 구하기 예시 10진수 1의 보수 : 1+9=10 -> 1의 보수 = 9 3의 보수 : 3+7=10 -> 3의 보수 = 7 2진수 1₂의 보수 : 1₂+ 1₂=10₂ -> 1₂의 보수 = 1₂ 10₂의 보수 : 1001₂+0111₂=11110₂ -> 1001₂의 보수 = 0111₂ 컴퓨터에서 보수가 필요한 이유 컴퓨터는 이진수만 이해할 수 있습니다. 그렇다면 음수는 어떻게 표현할 수 있을까요? 음수를 표현하기 위해 보수가 사용됩니다. 컴퓨터에서 보수는 양수를 음수화로 표현하기 위한 방법이 됩니다. 즉, 보충하는 수. 양수에 대한 보수가 음수입니다. 컴퓨터의 CPU는 뺄셈도 모..
진법이란? 진법이란 수를 표기하는 기수법의 하나로 몇 개의 기본 숫자를 이용하여 수를 표시하는 방법입니다. 자리값이 올라감에 따라서 수가 일정하게 커지는 규칙을 이용하고 수를 표시합니다. 우리가 일반적으로 사용하는 1 ~ 9까지의 숫자를 사용하여 수를 나타내는 방법을 10진법이라고 하며 프로그래밍에서 주로 사용되고 있는 진법은 아래와 같습니다. 위치의 가중치 모든 진법은 숫자의 위치에 따라 가중치가 달라지는 수입니다. 이 성질은 모든 진법에서 동일하게 적용되며 이 식을 사용하면 모든 진법들을 10진법으로 빠르게 바꿀 수 있습니다. 위의 경우 12345라는 10진법이 나오기 아래와 같은 식이 구해져야합니다. 계산식 : (1 * 10⁴) + (2 * 10³) + (3 * 10²) + (4 * 10) + 5 ..
C나 C++과 같은 고급 프로그래밍 언어는 컴파일을 거쳐 어셈블리가 됩니다. C나 C++와 같은 매우 민감한 언어들은 전혀 예상하지 못한 에러들이 자주 발생합니다. 해결방안에 대한 힌트를 찾을 때 상황에 따라서는 어셈블리 코드를 직접 확인해야 할 경우가 있습니다. Visual Studio에서는 컴파일된 어셈블리 코드를 직접 확인할 수 있는 기능을 제공합니다. 어셈블리 창 사용 설정 확인 도구 -> 옵션을 클릭하고 옵션창에서 디버깅 -> 일반에 들어간 뒤 주소 수준 디버깅 사용 체크박스가 체크되어있는지 확인합니다. 이것이 체크되어 있어야 디스 어셈블리 기능의 사용이 가능합니다. 어셈블리 코드 확인(DisAssembly) 디스 어셈블리 창을 보려면 분기점을 설정하고 F5를 눌러 디버그 모드로 실행해야 합니다..
Visual Studio 프로젝트에서 빌드를 하는 방법에는 릴리스(Release)와 디버그(Debug) 방식이 있습니다. 하지만 정확한 차이점은 모르시는 분이 많더군요. 대부분 Debug 버전은 디버깅용으로 Release 버전은 최종 배포용으로 빌드하는 것과 Relase 방식이 Debug 방식보다 빠르다 이 정도로만 알고 있지 이 두 가지의 정확한 차이점은 대부분 알지 못하는 듯하여 두 모드의 핵심적인 차이점 몇 가지를 이 포스팅에서 한번 정리해보고자 합니다. Release에서는 코드 최적화를 하고 Debug에서는 하지 않는다. 프로젝트 속성의 최적화로 들어가 보시면 Release는 위와 같이 최대 최적화로 되어 있는 반면 Debug는 사용 안 함으로 되어있는 것을 확인하실 수 있습니다. 여기서 코드 최..
이클립스를 사용하는데 글씨가 너무 작아서 글자가 제대로 보이지도 않고 눈에 피로감이 몰려오면 큰일이겠죠. 간단한 설정만으로도 이클립스의 폰트와 크기를 변경하실 수 있습니다. 이번 포스팅에서는 오늘은 이클립스의 글자 폰트와 크기를 바꾸는 방법에 대해서 알아보도록 하겠습니다. 단축키 활용 폰트 사이즈의 경우 단축키만으로도 간단히 조절할 수 있습니다. 에디터 창에 마우스 커서를 가져다 놓고 Ctrl + '+' or '-' 를 눌러주면 폰트 사이즈가 조정됩니다. 이클립스 폰트, 크기 설정하기 1. Window -> Preferences 창으로 들어갑니다. 2. General -> Color and Fonts를 눌러 Color and Fonts로 들어가준 뒤 바꾸고 싶은 언어를 클릭합니다. 전체를 바꾸고 싶으면 ..