프로그래밍-학습기록 95

인텔리제이(intellij) 커밋메시지 글자 수 표시하는 방법

커밋 메시지, 특히 커밋 메시지의 제목(title)이 너무 길면 웹이나 로그에서 커밋 메시지가 잘려 나와서 커밋을 한 눈에 파악하기 힘듭니다. 비주얼 스튜디오 코드(Visual Studio Code, VSCode)에서 소스 제어(깃허브 버전 관리) 시 커밋 메시지를 작성하면 VSCode에서 글자 수를 세어줘서 편했습니다. 하지만 인텔리제이(intelliJ)에서 버전 관리를 할 때 초기 설정은 커밋 메시지의 글자 수가 나오지 않습니다. 따로 설정을 해줘야 하는데요. 방법은 다음과 같습니다. 먼저 File-Settings 로 들어가줍니다. Version Control 메뉴로 들어가서 중앙의 Commit message inspections에 들어갑니다. 거기서 Limit subject line을 클릭해 Rig..

자바스크립트 데이터 타입(기본형, 참조형) 이해하기

자바스크립트 세부 데이터 타입(Array, String ...)의 성질을 살펴보기 보다 기본형과 참조형의 특징이 무엇이고 어떻게 구분하는지 다룹니다. 자바스크립트 데이터 타입 이해하기 자바스크립트 데이터 타입은 크게 두 종류입니다. 기본형(원시형, primitive type)과 참조형(reference type)이다. 이에 따른 세부 데이터 타입은 다음과 같습니다. 기본(원시)형 → Number, String, Boolean, null, undefined, Symbol 참조형 → Object, Array, Function, Date, RegExp, Map, WeakMap, Set, WeakSet, 참조형은 모두 객체(Object)의 하위 분류에 속합니다. 기본형과 참조형을 구분하는 기준 기본형은 값이 담..

클래스의 내부와 외부를 구분해야 하는 이유는?!

클래스의 내부와 외부를 구분해야 하는 이유 1. 경계의 명확성이 객체의 자율성을 보장하기 때문이다. 객체가 자율적인 존재로 우뚝 서기 위해서 외부의 간섭을 최소화해야 한다. 일반적으로 객체의 상태는 숨기고 행동만 외부에 공개해야 한다. 외부에서는 객체가 어떤 상태에 놓여 있는지, 어떤 생각을 하고 있는지 알아서는 안 되며, 결정에 직접적으로 개입하려고 해서도 안 된다. 객체에게 원하는 것을 요청하고는 객체가 스스로 최선의 방법을 결정할 수 있을 것이라는 점을 믿고 기다려야 한다. 캡슐화와 접근 제어는 객체를 두 부분으로 나눈다. 하나는 외부에서 접근 가능한 부분으로 이를 퍼블릭 인터페이스라 부른다. 다른 하나는 외부에서 접근 불가능하고 오직 내부에서 접근 가능한 부분으로 이를 구현이라 부른다. 2. 프로..

운영체제에서 일어나는 인터럽트는 무엇일까?

운영체제와 인터럽트 CPU 연산과 I/O 연산에서 일어나는 인터럽트 입출력 장치들의 I/O 연산은 입출력 컨트롤러가 담당한다. 컴퓨터 내에서 수행되는 연산은 메인 CPU가 담당한다. 이때 입출력 장치와 메인 CPU는 동시에 동작이 가능하다. 각 장치마다 이를 제어하기 위해 설치된 장치 컨트롤러는 장치로부터 들어오고 나가는 데이터를 임시로 저장하기 위한 작은 메모리, 로컬 버퍼(local buffer)를 가지고 있다. 프로그램이 장치에게 어떤 명령을 내리면 그 장치의 컨트롤러가 로컬 버퍼에 명령을 수행하여 관련 메모리를 로컬 버퍼에 저장한다. 이때 CPU가 이 작업이 끝났는지를 지속적으로 체크하는 것이 아니다. 장치에 있는 컨트롤러가 인터럽트를 발생시켜 CPU에 상황을 보고한다. 이때 인터럽트란, 컨트롤러..

신호를 전송할 때 일어나는 일

신호를 전송할 때 일어나는 일 인터페이스가 하는 일 컴퓨터와 통신 매체를 중개하는 인터페이스는 비트를 신호로, 신호를 비트로 변환하는 기기다. 신호와 비트 신호에는 아날로그 신호와 디지털 신호가 있다. 아날로그는 '파장', 디지털은 'ON'과 'OFF'이다. 현재 통신에서 사용되는 것은 압도적으로 디지털 신호가 많다. 비트는 '0'이나 '1'이다. 비트는 디지털 신호로 사용된다. 예를 들어 '0'을 'OFF', '1'을 'ON'으로 사용하면, 신호 하나로 비트 하나가 된다. 신호와 비트의 대비(부호화 방식)은 여러 방식이 존재하며 대표적으로 RZ(Return to Zero)와 NRZ(Non Return to Zero)가 있다. 부호화 방식의 자세한 예는 이 글에 있다. 통신속도는 '1초 동안의 신호의 횟..

OSI 참조모델에서 1계층의 역할

OSI 참조모델에서 1계층의 역할 사전 지식 OSI 참조모델은 국제 표준화 기구(ISO)가 네트워크 통신에서 '데이터를 송수신하기 위한 규칙'인 프로토콜과 규격을 통일, 표준화하려는 과정에서 선언됐다. OSI 참조 모델은 데이터 통신의 단계 구성도로, 데이터 통신 표준화 이전에 데이터 통신 전체의 설계도를 만들려 한 시도에서 나온 결과물이다. 국제 표준화 기구는 데이터 통신을 단계로 나누어 각 단계의 순서를 명확히하고, 이 모델에 따라 프로토콜을 정의해서 데이터 통신을 구축하려 했다. OSI 참조 모델은 데이터 통신을 7단계로 나눈다. 이 단계를 계층(layer, 레이어)라고 부른다. 각 계층마다 각각의 역할과 규칙이 있다. 데이터를 수신하는 측에서는 1계층부터 7계층까지 순서대로 각 역할..

Python 정적 타입 선언

Python에서 정적 타입 선언을 이해하기 위해 알아야 할 것들 파이썬은 타입이 동적으로 할당된다. 즉, 원래 따로 타입을 명시하지 않았다. 규모가 작은 파이썬 프로젝트일 때 동적 변수 타입 할당은 이해가 빠르고 코드 작성 속도에서 유리하다. 하지만 프로젝트 규모가 커질수록 동적 할당은 런타임 오류 발생 확률이 높아지도록 만든다. 따라서 버그를 미연에 방지하기 위해 타입을 명시해주는 것이 좋다. 파이썬에서는 어떻게 정적으로 변수의 타입을 선언할까? 바로 타입 어노테이션(또는 힌트)이다. 이 글에 의하면 파이썬 버전 3.5부터 타입 어노테이션(또는 힌트)가 추가되었다고 한다. 그것이 typing 모듈(공식 문서)로 구현되었다. 그렇게 선언된 정적 타입을 Mypy라는 정적 타입 검사 도구로 검사한다. Myp..

<오브젝트>에서 말하는 '객체지향, 왜 필요한가?'

책 에서 말하는 객체지향 설계 책 의 34쪽에서 36쪽을 발췌, 요약한 글입니다. 설계가 왜 필요한가 항상 변경되는 요구사항에 잘 대응하기 위해서 좋은 설계가 필요하다. 우리가 짜는 프로그램은 두 가지 요구사항을 만족시켜야 한다. 우리는 오늘 완성해야 하는 기능을 구현하는 코드를 짜야 하는 동시에 내일 쉽게 변경할 수 있는 코드를 짜야 한다. 좋은 설계란 오늘 요구하는 기능을 온전히 수행하면서 내일의 변경을 매끄럽게 수용할 수 있는 설계다. - 35p 요구사항은 항상 변경된다. 코드를 변경해야 한다. 버그가 발생할 가능성이 높아진다. 그러니 변경을 수용할 수 있는 설계가 중요하다. 객체지향 설계 객체지향 프로그래밍은 의존성을 효율적으로 통제할 수 있는 다양한 방법을 제공함으로써 요구사항 변경에 좀 더 수..

javascript 논리연산자(&&, ||) 우선순위 vs. 단락 평가(short circuit)

자바스크립트 논리연산자를 공부하다가 논리연산자 우선순위와 단락 평가를 알게 됐다. 배우면서 알게된 것을 기록해두려고 한다. 자바스크립트에서 논리연산자는 표현식을 반환한다. 자바스크립트에서 논리연산자 AND와 OR는 참과 거짓만 반환하는 게 아니라, 표현식 자체를 반환한다. 규칙은 다음과 같다. AND의 경우 왼쪽이 참 같은 값(Truthy)이면 오른쪽을 반환하고, 참 같은 값이 아니면 왼쪽을 반환한다. OR의 경우 왼쪽이 참 같은 값이면 왼쪽을 반환하고, 참 같은 값이 아니면 오른쪽을 반환한다. 논리 연산자 우선순위는 표에 의하면 AND는 6, OR는 5로 AND가 OR 보다 우선순위가 더 높다. 다음은 MDN 웹 문서에 나와 있는 예제다. true || false && false // returns t..

주요 디자인 패턴

주요 디자인 패턴 디자인 패턴이란? 반복적으로 사용되는 소프트웨어 설계 패턴 전략(Strategy) 패턴 예시 상황 → 과일 매장에서 상황에 따라 다른 가격 할인 정책을 적용할 때 서로 다른 계산 정책들이 한 코드에 섞여 있어, 정책이 추가될수록 코드 분석이 어려움 가격 정책이 추가될 때마다 calculate 메서드를 수정하는 것이 점점 어려워진다. 예를 들어 마지막 손님 50% 할인과 같은 새로운 가격 정책이 추가될 경우, calculate 메서드에 마지막 손님을 구분하기 위한 lastGuest 파라미터가 추가되고 if 블록이 하나 더 추가되어야 한다. 일반 상황 if - else로 구성된 코드 블록이 비슷한 기능(비슷한 알고리즘)을 수행하는 경우 완전히 동일한 기능을 제공하지만 성능의 장단점에 따라 ..