TIL
103
FundamentalTILDesign pattern
Observer pattern
Oberver패턴은 데이터의 변경이 발생했을 경우 상대 클래스나 객체에 의존하지 않으면서 데이터 변경을 통보하고자 할 때 유용하다. 예를 들어 새로운 파일이 추가되거나 기존 파일이 삭제되었을 때 탐색기는 이를 즉시 표시할 필요가 있다. 다른 예로는 차량의 연료가 소진될 떄 까지 주행 가능 거리를 출력하는 클래스, 연료량이 부족하면 메시지를 보내는 클래스 등이 있다. 입력된 성적 값을 출력하는 프로그램을 만들어 보자. 입력된 점수를 저장하는 ScoreRecord클래스와 점수를 목록 형태로 출력하는 DataSheetView클래스가 필요
FundamentalTILOperating System
Introduce Operating System
커리큘럼이 짬뽕식이긴 한데 하다보니 운영체제를 공부하게 됐다. 프로세스 생명주기나 메모리 관리에 대한 내용을 보다보니 지나칠 수가 없었다. 처음엔 Operating System Concepts 책을 보려고 했으나 시간적인 문제도 있고 개론적으로 내용을 알고 있기 때문에 Operating System Concepts Essentials로 진행하기로 했다. 너무 많은 내용을 담지 않겠다. 컴퓨터 시스템은 대게 하드웨어, 운영체제, 응용프로그램, 사용자 네가지 구성요소로 구분할 수 있다. 운영체제는 대부분 사용의 편의성을 위해 설계되고
FundamentalTILDesign pattern
Command pattern
Command패턴은 이벤트가 발생했을 때 실행될 기능이 다양하면서도 변경이 필요한 경우에 이벤트를 발생시키는 클래스를 변경하지 않고도 재사용을 가능하게 할때 유용하다. 실행될 기능을 캡슐화함으로써 기능의 실행을 요구하는 Invoker 클래스와 실제 기능을 실행하는 Receiver클래스 사이의 의존성을 제거한다. 따라서 실행될 기능의 변경에도 Invoker 클래스를 수정없이 그대로 사용할 수 있도록 해준다. 램프를 켜는 버튼을 만들어보자 Button클래스의 생성자를 이용해 불을 켤 Lamp객체를 전달한다. Button클래스의 pres
FundamentalTILDesign pattern
State pattern
실세계의 많은개체는 자신이 처한 상태에 따라 일을 다르게 수행한다. 비가 오거나 눈이 오거나 사람이 많이 붐비는 장소에 있거나 따라 걷는 방식과 말하는 방식이 달리지는 것과 마찬가지인 이치다. 이를 표현하는 가장 직접적이고 직관적인 방법은 이를 수행할 때의 상태에 따라 상태 하나하나를 검사해 일을 다르게 수행하게끔 하는 것이다. 이는 분명히 복잡한 조건식이 있는 코드를 산출할 것이고, 결과적으로 코드를 이해하거나 수정하기 어렵게 만든다. 이런 방식과 달리 State패턴은 어떤 행위를 수행할 때 상태에 행위를 수행하도록 위임한다. 이
FundamentalTILC
Pointer guide; struct
아래 코드가 있다 문자열을 담고있는 다중 배열을 구조체에 담아 반환하는 내용의 함수다. 반환되는 구조체 배열을 순회하는 코드는 다음과 같다 구조체 포인터를 순회하기 위해서는 . 대신 ->로 참조한다.
FundamentalTILC
Pointer guide; multiple pointer
변수 포인터의 가장 적절한 예는 배열과 문자열이다. 배열의 가장 앞 원소(element)의 주소는 배열의 시작 주소와 동치다. char형의 배열은 곧 문자열이다. 맨 앞 문자의 주소는 문자열의 시작 주소와 동치다. 이러한 배열 자체를 원소로 삼아 또 다른 배열을 만들 수 있다. 어렵게 생각할 것 없이 아래 도식을 보자. 각각 요소 3개를 가진 배열 4개의 주소를 담고 있는 배열. 이게 전부 다다. *를 두개 선언함으로써 배열주소를 담은 배열을 만들 수 있다. 아래 도식을 추가로 보자. malloc으로 실제 동적 할당과 배열이 어떻게
FundamentalTILC
string.h functions
C의 string과 관련된 함수들 몇 가지를 정리 해봤다. 위는 string.h 함수의 원형이고 아래는 간단히 구현해본 코드다. s2가 가리키는 문자열의 복사본을 (NULL문자까지 포함하여) s1이 가리키는 위치에 붙인다. s2 문자열의 첫번째 문자가 s1문자열의 NULL문자를 덮어 쓴다. s1을 리턴한다 s2가 가리키는 문자열에서 n개의 문자들의 복사본을, 또는 NULL문자까지 복사본을 s1이 가리키는 위치에 붙인다. s2의 문자열 첫번째 문자가 s1 문자열의 NULL 문자를 덮어 쓴다. NULL문자가 항상 추가된다. s1을 리턴
FundamentalTILC
Pointer guide; iterator and manipulate
char src[55] : 문자열 조작을 위해서 상수가 아닌 스택 또는 힙 영역으로 할당해야한다. tmp_str = str; : 단순히 포인터(문자열)를 순회하는것이 아닌 조작을 필요로 할때는 원본 주소를 보존한다. 그리고 대신 순회할 포인터 변수에 원본 주소를 받는다. tmp_str++ : 주소를 대리로 이동하기 때문에 원본의 값 또한 변경된다. 그러나 원본의 시작 주소는 건드리지 않고 있다. 여기서 따로 배열을 만들어서 상수에 대응할 수 없는 이유는 지역변수는 메소드를 벗어나면 변수 데이터가 사라지기 때문이다. 이와 관련해서 읽