워치독 타이머(Watchdog Timer)
·
Programming/기타
워치독 타이머란?정의컴퓨터의 오작동을 감지하고자 쓰이는 일종의 데드맨 스위치 같은 것.정상 작동중인 컴퓨터는 타임아웃이나 무한 루프같은 상황에 빠지지 않도록 일정 시간마다 정기적으로 워치독 타이머를 재가동 시킨다. 만약 하드웨어 오류나 프로그램 오류로 인해 컴퓨터가 워치독을 재가동 시키는데 실패하면 타이머가 시간을 두고 타임 아웃 신호를 생성하게 된다. 이 타임아웃 신호를 통해 컴퓨터를 재부팅 하는 등 여러 조치를 취하게 된다. 이런 워치독 타이머는 당연하게도 별도의 회로를 갖추거나 시스템과 독립적으로 작동하도록 설계되어있다. 보통 사람이 자주 관리하기 힘든 임베디드 시스템 같은 곳에서 주로 사용된다. 구조워치독이 하나인 경우워치독이 시스템에 하나인 경우에는 그림과 같이 클럭 신호를 받고 컴퓨터가 주기적..
소프트웨어의 정의와 특성
·
Programming/기타
소프트웨어의 정의 응용 프로그램이나 데이터처럼 컴퓨터를 제어하고, 명령을 수행할 수 있게 만들어주는 프로그램이라고 할 수 있다. 원래는 문자 그대로 컴퓨터에서 동작되거나 처리되는 것만을 소프트웨어라고 불렀지만, 현재는 소프트웨어의 범위가 넓어져 수많은 것들이 소프트웨어 취급을 받고 있다. (게임, 네비게이션 지도 등등도 포함된다.)  소프트웨어는 크게 시스템 소프트웨어와 응용 소프트웨어로 나눌 수 있다. 시스템 소프트웨어는 응용 소프트웨어가 작동하는 환경을 만들거나 컴퓨터를 유지, 관리하는데 사용되는 소프트웨어이다. 그 특성때문에 플랫폼이라고도 부른다. 사용자가 컴퓨터 하드웨어의 물리적인 특성이나 구조를 전부 알지 못하더라도 컴퓨터 시스템을 사용할 수 있게 도와주는 역할을 한다.대표적인 시스템 소프트웨어..
인터페이스와 추상클래스
·
Programming/기타
인터페이스인터페이스란?본래 프로그래밍 언어에서는 중요한 개념이 하나 존재한다. 같은 구문이 두 가지 이상의 의미로 해석될 여지가 있어서는 안 된다라는 것이다. 이러한 모호성을 해결하기 위해 만약 예약어가 겹치는 경우 어느 라이브러리의 예약어인지를 추가로 작성을 해줘야 한다. 이러한 이유로 다중 상속은 본래 불가능하지만 가끔 필요한 경우가 존재한다. 이러한 경우를 해결하기 위해 도입 된 것이 바로 인터페이스이다. 인터페이스는 interface 키워드를 이용하여 선언이 가능하다. 그러나 몇가지 제한사항이 존재하는데,1. 인터페이스는 추상 메서드와 상수만을 포함한다.2. 접근 제한자는 모두 public이고, 인터페이스를 상속받은 클래스에게 오버라이드를 강제한다.3. 상속받은 클래스에서 구현하는 메서드도 모두 ..
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이라고 하는 클래스가 있다고 해보자. 이 클래스는 커피를 생성하는 메서드가 있다...