프로그래밍 관련
번외. 컴퓨터에서 음수를 표현하는 방법
번외. 컴퓨터에서 음수를 표현하는 방법
2022.01.06컴퓨터는 0과 1의 이진수만 이해할 수 있는데, 이런 컴퓨터 세계에선 음수를 어떻게 표현할까요? 컴퓨터에서 음수를 표현하는 방법은 부호 절댓값 방식(signed magnitude), 1의 보수, 2의 보수와 같이 크게 세 가지가 있습니다. 먼저 부호 절대값 방식부터 알아보도록 하겠습니다. 부호 절댓값 방식 부호 절댓값 방식은 0과 양수, 음수를 표현할 수 있는 가장 단순한 방법입니다. 이 방식은 최상위 비트로 부호를 표현하고, 나머지 비트로 해당 정수의 절댓값을 나타냅니다. 여기서 최상위 비트(Most Significant Bit, MSB)를 부호 비트로 쓰면서 표현할 수 있는 절댓값의 범위는 절반으로 줄어들게 됩니다. 최상위 비트가 0이면 양수라는 뜻이고, 1이면 음수라는 뜻입니다. 문제점 하지만 이 ..
번외. 10진수와 2진수 간 변환하기
번외. 10진수와 2진수 간 변환하기
2021.08.1010진수를 2진수로 변환하기 정수부 우리는 일상생활에서 보통 10진수를 사용합니다. 반면에 컴퓨터는 모든 정보를 0과 1로 이루어진 비트의 형태로 저장합니다. 즉, 모든 걸 2진수로 저장한다는 소리입니다. 그만큼 2진수와 10진수 간 변환이 잦으며, 반드시 알아야 할 내용 중 하나입니다. 이 글에서는 서로 변환하는 방법을 알아보도록 하겠습니다. 10진법(decimal system) 한 자리의 수가 10이 될 때마다 자리올림을 하여 표시하는 방법을 10진법이라 합니다. 따라서 10진법으로 수를 표시할 때에는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9의 10가지 숫자를 필요로 합니다. 10진수를 2진수로 바꾸는 방법은 다음과 같습니다. 아래와 같이 바꾸고 싶은 진수의 수로 더 이상 나눌 수 없을 때..
메모. Command pattern
메모. Command pattern
2019.11.26커맨드 패턴(Command pattern)은 객체가 특정 기능을 바로 수행하거나 나중에 트리거할 때 필요한 모든 정보를 캡슐화하는 행동 패턴이다. 이렇게 하면, 나중에 순서대로 실행하기 위한 명령 목록을 구성하거나 되돌리기가 가능한 명령을 만드는 등이 가능하다. 커맨드 패턴이 캡슐화하는 정보는 다음과 같다. 메서드명 메서드를 소유하는 객체 메서드 인자(parameter) 목적 요청을 객체 속에 캡슐화한다. 클라이언트의 다양한 요청을 매개변수화한다. 커맨드 패턴의 UML 클래스 다이어그램 Invoker 클래스는 Command 인터페이스를 가진 객체의 execute() 메서드를 호출한다. 사실 이는 ConcreteCommand 클래스의 객체로, execute() 메서드는 실제 작업을 하는 Receiver 클..
메모. Iterator pattern
메모. Iterator pattern
2019.11.22이터레이터 패턴(Iterator pattern)은 가장 간단하면서도, 자주 사용되는 디자인 패턴 중 하나다. 이 패턴은 컬렉션이나 집합 객체의 내부적인 구현 방법을 드러내지 않으면서도 그 안에 있는 모든 원소에 순차적으로 접근할 수 있는 수단을 제공한다. 이터레이터 패턴의 UML 클래스 다이어그램 Iterator: 원소를 접근하고 순회하는 데 필요한 인터페이스를 제공한다. (다음 요소를 가져오거나, 현재의 위치를 찾거나, 다시 반복을 시작하는 등의 연산) ConcreteIterator: Iterator에 정의된 인터페이스를 구현하는 클래스. 순회 과정 중 집합 객체 내에서 현재 위치를 기억한다. IterableCollection: Iterator 객체를 생성하는 인터페이스를 정의한다. ConcreteCo..
파이썬 강좌 번외편. 클로저(Closure)
파이썬 강좌 번외편. 클로저(Closure)
2019.11.21이번 강좌는 클로저(Closure)에 대해 알아보도록 하겠습니다. 클로저는 위키백과의 정의를 빌어온자면 '컴퓨터 언어에서 클로저는 일급 객체 함수의 개념을 이용하여 스코프에 묶인 변수를 바인딩 하기 위한 일종의 기술이다.'라고 합니다. 파이썬을 처음 접하시는 분이라면 이 말이 무슨 말인지 전혀 감도 오지 않을 것입니다. 먼저 우리는 일급 객체 함수가 무엇을 말하는지 알아볼 필요가 있습니다. 일급 객체(First-class function) 파이썬에서 함수는 일급 객체입니다. 이는 우리가 평소에 숫자나 문자열, 클래스를 다루는 것처럼, 함수도 다른 객체와 동일하게 취급할 수 있다는 말과 같습니다. 즉, 함수를 매개변수로 넘기거나 다른 변수에 대입할 수 있으며, 반환값으로도 사용이 가능합니다. 심지어 리스트..
메모. Proxy pattern
메모. Proxy pattern
2019.11.18프록시 패턴(Proxy pattern)은 다른 객체를 대신할 객체가 필요한 경우 사용한다. 우리가 잘 알고있는 프록시 서버도 이에 해당이 된다. 프록시 서버는 아래와 같이 실제 서버와 클라이언트 사이의 중계기로서 대리로 통신하는 기능을 수행하는 역할을 맡는다. 프록시 패턴의 UML 클래스 다이어그램 서비스 인터페이스(Service Interface): 서비스의 인터페이스를 정의한다. 프록시는 클라이언트가 알아채지 못하도록 서비스 객체로 위장하기 위해 이 인터페이스를 구현해야 한다. 프록시(Proxy): 프록시에는 서비스에 대한 참조가 들어있다. 서비스와 프록시 모두 똑같은 인터페이스를 구현한다. 따라서, 서비스가 들어갈 수 있는 곳이면 프록시로 이를 대체할 수 있다. 여기서 프록시는 흐름 제어만 관여할 ..
메모. Facade pattern
메모. Facade pattern
2019.11.17퍼사드 패턴(Facade pattern)은 복잡한 내부 시스템 로직을 감추고 클라이언트가 쉽게 시스템에 접근할 수 있는 인터페이스를 제공한다. 퍼사드의 예를 들어보자면, 가장 손쉽게 볼 수 있는 것으로 우리 눈앞에 보이는 컴퓨터를 예를 들 수 있다. 사용자는 그저 컴퓨터를 시작하기 위해 전원 버튼을 누를 뿐, 부팅 과정 중 프로세서나 메모리, 주변 장치 등의 검사와 초기화 등과 같은 하드웨어와 관련된 작업들을 알아야 할 필요는 없다. 퍼사드 패턴의 UML 클래스 다이어그램 퍼사드(Facade): 외부에서 보기에 깔끔하도록, 복잡한 서브 시스템을 감싸는 역할을 한다. 어떤 클래스가 어떤 요청을 처리해야 하는지 알고 있으며, 클라이언트의 요청을 해당 서브 시스템 객체에 전달한다. 시스템(System): 전체..
메모. Factory method pattern
메모. Factory method pattern
2019.05.19Factory method pattern은 객체를 생성하기 위한 인터페이스를 정의하지만, 어떤 클래스의 인스턴스를 생성할지에 대한 결정은 subclass가 내리도록 한다. 이 패턴을 이용하면 클래스의 인스턴스를 만드는 일을 subclass에게 맡길 수 있다. 구조UML 클래스 다이어그램 Product: Factory method가 생성하는 객체의 인터페이스를 정의한다.ConcreteProduct: Product 클래스에 정의된 인터페이스를 실제로 구현한다.Creator: Product 타입의 객체를 반환하는 Factory method를 선언한다. Creator 클래스는 Factory method를 기본적으로 구현하는데, 이 구현에서는 ConcreteProduct 객체를 반환한다. 또한 Product 객체..
메모. Builder pattern
메모. Builder pattern
2019.05.18Builder pattern을 사용하면 제품을 여러 단계로 나눠서 만들 수 있도록 제품 생산 단계들을 캡슐화 할 수 있다. 구조 UML 클래스 다이어그램 Builder: client에서는 추상 인터페이스를 통해서 Product 객체의 일부 요소들을 생성한다. ConcreteBuilder: Builder 클래스에 정의된 인터페이스를 구현하며, 제품의 부품들을 모아 빌더를 복합한다. 특정 종류의 제품을 생성하고 조립하는 데 필요한 모든 코드가 들어간다.Director: Builder 인터페이스를 사용하는 객체를 합성한다.Product: 생성할 복합 객체를 표현한다. 장단점제품에 대한 내부 표현을 다양하게 변화시킬 수 있다. 생성과 표현에 필요한 코드를 분리한다. Builder pattern을 사용하면, 복합..
메모. Concrete class
메모. Concrete class
2019.05.13객체지향 관련 서적을 보다 보면 원서에는 concrete class라고 되어있는 것이, 번역서에는 '구상 클래스', '구현 클래스' 또는 '구체 클래스'라고 번역되어 있다. 이 이름을 보고 나서 이게 구체적으로 어떤 클래스를 의미하는 것인지 크게 와닿지 않았다. 좀 더 자세히 살펴보면, 우리가 이미 알고 있듯이 정의한 모든 연산(operation)이나 일부 연산의 구현을 서브클래스로 넘기는 추상 클래스(abstract class)나 객체의 연산에 대한 구현이 포함되어 있지 않고 정의만 존재하는 인터페이스를 통해 인스턴스를 만들 수 없다. 당연하게도 완성되지 않은 설계도를 가지고 제품을 만들 수는 없기 때문이다. 그럼, 모든 연산에 대한 구현을 가지고 있는 클래스를 뭐라고 할까? 바로 concrete cl..
메모. Abstract factory pattern
메모. Abstract factory pattern
2019.05.13Abstract factory pattern을 이용하면 인터페이스를 이용하여 서로 연관된, 또는 의존하는 객체를 concrete class를 지정하지 않고도 생성할 수 있다. abstract factory를 바탕으로 똑같은 제품을 다른 방식으로 구현하는 서로 다른 concrete factory를 만들어낼 수 있다. 구조 UML 클래스 다이어그램 AbstractFactory: 모든 concrete factory는 이를 구현해야 한다. 제품을 생산하기 위한 일련의 메서드들이 정의되어 있다.ConcreteFactory: 서로 다른 제품군(product family)을 구현한다. client에서 제품이 필요하면 이 factory 가운데 적당한 걸 골라서 쓰면 되기 때문에 제품 객체의 인스턴스를 직접 만들 필요가..
C# 메모. 크로스 스레드 문제
C# 메모. 크로스 스레드 문제
2019.04.09윈폼에서 개발하다 보면 아래와 같은 오류에 부딪히게 될 때가 있다. 이러한 크로스 스레드(Cross-thread) 문제를 해결하는 방법은 주로 아래와 같이 3가지 방법이 있다. CheckForIllegalCrossThreadCalls를 통해 해결 System.Windows.Forms.Control.Invoke를 통해 해결 System.ComponentModel.BackgroundWorker를 통해 해결 CheckForIllegalCrossThreadCalls 가장 간단한 해결 방법이다. 아래와 같이 코드 한 줄만 작성하면, UI 스레드 외의 스레드를 통해 컨트롤의 Handle에 접근하는 경우를 잡아내지 않도록 만들 수 있다. CheckForIllegalCrossThreadCalls = false; 그러나..