go is typical static type language like Java and Cto be metaphorical, interface is like the shell of a clam. you wrap the value by shell and once you
조건 전체 단어배열을 받고, 하나의 줄의 길이를 input으로 받아서 조건에 맞는 문자열 배열을 반환한다 예제를 통해서 조건을 살펴보자 "This", "is", "an", “example” 글자는 총 15글자이기 때문에 첫번째 줄에 들어갈수 있을 것 같지만 모든 단어와 단어 사이에는 기본적으로 “ ” space가 들어가야 하기 때문에 최대 글자수...
컨슈머그룹에 컨슈머가 추가되거나 삭제되었을 때 카프카 브로커가 어떻게 동작하는지 알아보자.다음과 같은 상황을 가정한다컨슈머 그룹 이름 : schedule-log-group-test토픽 이름 : JobLogDev파티션 개수 : 3개컨슈머 개수 : 3개카프카 컨슈머의 특성
우리가 일반적으로 사용하는 list.map((a) ⇒ a + 1) 과 같은 것들은 모나드가 적용된 예이다. 여기서 list가 위에서 알아본 Monad 이다. Array 객체안에는 실제 heap 메모리의 시작주소(배열)를 가리키고 있는 포인터변수가 멤버변수로 있을 것이
학문적으로 모나드를 이해해보려 했지만 짧은 시간에 모나드를 이해하기는 쉽지 않았다. 그래서 모나드가 주는 가치에 대해서 실제로 모나드가 어떻게 사용되는지에 대해서 알아보면 이해가 좀 더 쉬울 수 있다.함수형 프로그래밍은 함수의 합성을 통해서 프로그램을 이어나가는 패러다
함수는 input을 받으면 일정한 output을 뱉는 코드 묶음외부 변수가 없으면 일정한 input을 넣으면 “반드시” 일정한 output이 나온다외부 변수를 사용하지 않는다반드시 함수 스코프 범위 안에 있는 변수만 사용한다상태를 변경하지 않는다매개변수로 배열이나 객체
이번 포스팅에서는 2진수의 특성과 비트연산을 활용해서 할수 있는 여러가지 프로그래밍적인 기법을 알아보겠다.성능을 위해서 실제로 우리가 작성한 코드를 컴파일러 수준에서 앞으로 배울 연산들로 바꿔주는 경우도 있다. 이렇게 2진수를 활용한 여러가지 꼼수(?)들을 사용해서 컴
이번에는 운영체제의 메모리 관리의 핵심인 가상메모리에 대해서 알아보겠다.다음과 같은 상황을 상상해보자8GB 메모리에 실행파일 하나의 크기가 1GB인 파일이 20개가 실행중1GB크기의 프로세스가 20개면 20GB인데 어떻게 8GB메모리에서 실행가능할까?운영체제에서는 8G
세마포어와 뮤텍스를 통해서 임계구역에 대해 상호배제를 통한 동기화를 알아보았다. 두개의 동기화 방법의 단점이라면 임계구역으로 들어가기전 wait(), 임계구역을 빠져나올때 signal 혹은 release를 해주는 등의 코드를 프로그래머가 직접 넣어주어야 하는것이다. 프
뮤텍스를 통한 프로세스 동기화에서 멀티코어 cpu인 경우 스핀락을 통해서 문맥교환 없이 스레드들은 뮤텍스 락을 얻기 위해 경합하고 임계구역에 접근하는 방법을 알아보았다. 하지만 cpu를 획득 하기 위해서 끊임없이 반복문을 실행하고 있는 바쁜대기(busy waiting
피터슨의 해결안은 이론적으로는 프로세스 동기화를 위한 3가지 조건을 만족하지만 연산의 하드웨어 구현상의 문제로 인해서 스레드들이 임계구역으로 접근하기 위한 권한을 얻는 과정에서 경합상황이 발생하게 되었다.이런 구현상의 한계는 운영체제를 디자인 할 때 부터 "임계구역으로
프로세스의 동기화 이슈는 프로그래밍을 하면서 만나는 중요한 이슈다. 운영체제가 사용하는 프로세스 번호를 관리하는 전역변수 next_available_pid가 있다. 프로그램 실행 도중 프로세스A와 프로세스B가 생성되었다.두 프로세스는 우연히 비슷한 시기에 프로세스를 생
동적프록시 적용 포스팅에서 config를 따로 만들어서 타겟에 동적프록시가 적용되도록하고 연관된 빈을 일일이 연결해줬다. 이렇게 동적 프록시를 적용하면 컨테이너의 컴포넌트 스캔 대상에 들어갈 수 없기 때문에 불편한 점이 있었다. 컴포넌트 스캔을 도중 빈이 컨테이너에 등
문제 인터페이스를 사용한 프록시 패턴을 사용하면서 프록시를 적용하고자 하는 클래스 개수 n개 만큼 로깅 코드를 계속 생성해야하는 문제가 있었다. 프록시를 적용하고자 하는 클래스마다 인터페이스와 프록시 구체클래스를 만들어줘야 했기 때문이다. 이 문제를 해결하기 위해 JD
전략패턴을 통해서 로깅을 적용해서 비지니스 로직을 담당하는 클래스와 로깅(부가기능)을 담당하는 클래스를 분리할 수 있었지만 여전히 메인 기능에 해당하는 코드를 변경해야 하는 단점이 있었다. 이 문제를 해결하기 위해서 프록시 패턴을 사용해서 메인 기능의 수정 없이 요청
이전 포스팅에서 템플릿 메서드 패턴을 통해서 비지니스로직과 부가기능인 로깅을 분리했었다. 하지만 상속을 사용해서 결합도가 증가하고, 추상 내포클래스를 사용해서 가독성이 떨어지는 등의 문제가 있었다.이런 문제들을 해결하기 위해 콜백을 사용한 전략패턴을 통해서 로깅부분을
WAS서버에 요청이 들어왔다가 http response로 나가기까지 몇분이 걸리는지 측정해야하는 상황을 가정해보자.이런식으로 표시할 수 있다.단점이 있다면, 모든 기능의 비지니스 로직 전과 후에 시간을 찍어주는 기능을 넣어야 한다. 결국 이런식의 설계는 유지보수를 힘들
문자열 출력 함수에서 어떻게 매개변수로 넣은 정수형을 곧바로 문자열로 포매팅해서 출력할까?문자열 출력함수와 가변 매개변수에 대해서는 다른 포스팅에서 알아보도록 하고, 이번에는 어떻게 정수형의 데이터를 문자열로 출력하는지에 대해서 알아보겠다.우선 매개변수로 들어온 정수가
함수포인터의 작동원리를 이해하기 위해서는 컴파일의 과정을 먼저 이해해야 한다.clang 컴파일러는 4가지 단계를 거쳐 소스코드를 실행파일로 만든다. "컴파일"은 넓은 의미에서 이 과정을 포괄하는 말이다. 하지만 좁은 의미의 컴파일은 전처리 다음단계인 translatio
This is my personal experience when I code a small game with C. What I thought for size_t is a simple and ideal type to break negative loop as it can