목록2024/11 (22)
구어체로 설명하는 다이어리

IPv4 란? IP 주소에 대해 충분히 알아보았으니 오늘은 IPv4(Internet Protocol Version 4)와 IPv6 (Internet Protocol Version 6) 에 관해 알아보도록 합시다. 우선 IP 주소는 0부터 255까지의 숫자이며 3개의 점으로 구분한다고 했었죠. 조금 더 정확하게는 이 설명은 IPv4에 대한 설명입니다. 192.168.0.1 과 같은 모양으로 생긴 IP 주소는 여러분들도 컴퓨터를 다루면서 한 번 쯤 보신 적 있으시죠? 이 IPv4로는 43억개 가량의 주솟값을 표현할 수 있다고 합니다. 그런데 처음 IP 주소를 할당할 때만 해도 이 43억개 가량의 주솟값을 전부 소진하리라고는 생각하지 못했습니다. 컴퓨터 뿐만 아니라 개인 핸드폰, 노트북, 태블릿... 한 사..

IP (Internet Protocol) 란? 전에 작성한 포스팅으로 우리는 프로토콜이 무엇인지에 대해 배웠었죠? 가볍게 정리하자면 프로토콜이란 인터넷에서 사용하는 통신 규약입니다. 나와 상대방이 대화가 가능한 이유는 공통적인 언어 (한국어) 로 지정된 문법에 맞춰 이야기를 나누기 때문이며, 이 모든 것들의 사용 방법을 미리 약속해두었기에 가능한 것입니다. 이것을 바로 프로토콜이라 합니다. 그렇다면 Internet Protocol, 단어에서 어떤 의미인지 파악이 되시나요? 떠올리신 그것이 맞습니다. 바로 인터넷에서 정보를 주고받기 위해 따라야 하는 규칙입니다. 데이터를 보내는 방법과 순서 같은 것들을 정해주는 약속인 것이죠. IP 주소 란? 그럼 IP 주소란 무엇일까요? 인터넷에 연결된 기기들의 고..

오늘은 타입스크립트에서 사용하는 type과 interface에 대해 가볍게 알아보고 어떤 것을 사용하면 좋은지에 대해 이야기해보겠습니다. type과 interface는 개발자가 타입에 이름을 지정하여 타입을 부여하고 싶을 때 사용하는 문법입니다. type type Name = string;const name: Name = '씨씨상'; 프로그래밍에서 코드를 알아보기 쉽게 변수에 이름을 붙이듯이 특정 타입 (string) 에 특정 이름 (Name) 을 붙여주는 것입니다. 그런데 이렇게 쉬운 예제는 별로 없고 보통은 복잡한 데이터 타입에 이름을 붙여주고 싶을 때 사용합니다. 이를 타입 별칭을 만든다고 합니다. type Person = { name: string; age: number;};const pe..

undefined와 null에 관하여 타입스크립트에 대한 내용을 서치하고 있는데 사람들이 undefined를 사용할지, null을 사용할지에 대한 내용으로 여러가지 포스팅이 올라와있는 것을 보게 되었습니다. 처음 봤을 때는 아니 이게 논란거리가 된다고?난 늘 이렇게 살아왔는데 라고 생각했습니다만 타입스크립트에서는 아예 null은 사용하지 말고 undefined를 사용하라는 컨벤션까지 있다고 하고 (물론 강제하는 것은 아니겠지만), [https://github.com/Microsoft/TypeScript/issues/8940] 여러 가지 글을 읽고 나니 제가 그동안의 제가 편향적으로 생각했던 것은 아닌가 싶어 블로그로 정리하게 되었습니다. 다른 블로그에 훨씬 더 잘 정리되어 있는 글이 많으므로 진정한 이..

변수 이름 바꾸기 let a = height * width; ▼ let area = height * witdh; 배경명확한 프로그래밍의 핵심은 이름짓기다. 변수는 프로그래머가 하려는 일에 관해 많은 것을 설명해준다. 단, 이름을 잘 지었을 때만 그렇다. 사실 나는 이름을 잘못 지을 때가 많다. 고민을 충분히 하지 않아서거나, 개발을 더 하다 보니 문제에 대한 이해도가 높아지거나, 혹은 사용자의 요구가 달라져서 프로그램의 목적이 변해 그럴 때도 있다. 특히 이름의 중요성은 그 사용 범위에 영향을 많이 받는다. 한 줄짜리 람다식lambda expression에서 사용하는 변수는 대체로 쉽게 파악할 수 있다. 맥락으로부터 변수의 목적을 명확히 알 수 있어서 한 글자로 된 이름을 짓기도 한다. 마찬가지로..

변수 캡슐화하기 let defaultOwner = { firstName: '마틴', lastName: '파울러' }; ▼ let defaultOwnerData = { firstName: '마틴', lastName: '파울러' };export function defaultOwner() { return defaultOwnerData;}export function setDefaultOwner(arg) { defaultOwnerData = arg;} 배경리팩터링은 결국 프로그램의 요소를 조작하는 일이다. 함수는 데이터보다 다루기가 수월하다. 함수를 사용한다는 건 대체로 호출한다는 뜻이고, 함수의 이름을 바꾸거나 다른 모듈로 옮기기는 어렵지 않다. 여차하면 기존 함수를 그대로 둔 채 전달forward ..

함수 선언 바꾸기 function circum(radius) { ...} ▼ function circumference(radius) { ...} 배경함수는 프로그램을 작은 부분으로 나누는 주된 수단이다. 함수 선언은 각 부분이 서로 맞물리는 방식을 표현하며, 실질적으로 소프트웨어 시스템의 구성 요소를 조립하는 연결부 역할을 한다. 건축과 마찬가지로 소프트웨어도 이러한 연결부에 상당히 의존한다. 연결부를 잘 정의하면 시스템에 새로운 부분을 추가하기가 쉬워지는 반면, 잘못 정의하면 지속적인 방해 요인으로 작용하여 소프트웨어 동작을 파악하기 어려워지고 요구사항이 바뀔 때 적절히 수정하기 어렵게 한다. 다행히 소프트웨어는 소프트하기 때문에 연결부를 수정할 수 있다. 단 주의해서 해야 한다. 이러한 연..

변수 인라인하기 let basePrice = anOrder.basePrice;return basePrice > 1000; ▼ return anOrder.basePrice > 1000; 배경변수는 함수 안에서 표현식을 가리키는 이름으로 쓰이며, 대체로 긍정적인 효과를 준다. 하지만 그 이름이 표현식과 다를 바 없을 때도 있다. 또 변수가 주변 코드를 리팩터링하는 데 방해가 되기도 한다. 이럴 때는 그 변수를 인라인하는 것이 좋다. 절차대입문의 우변(표현식)에서 부작용이 생기지는 않는지 확인한다.변수가 불변으로 선언되지 않았다면 불변으로 만든 후 테스트한다.이렇게 하면 변수에 값이 단 한 번만 대입되는지 확인할 수 있다.이 변수를 가장 처음 사용하는 코드를 찾아서 대입문 우변의 코드로 바꾼다.테스트한..

변수 추출하기 return order.quantity * order.itemPrice - Math.max(0, order.quantity - 500) * order.itemPrice * 0.05 + Math.min(order.quantity * order.itemPrice * 0.1, 100); ▼ const basePrice = order.quantity * order.itemPrice;const quantityDiscount = Math.math(0, order.quantity - 500) * order.itemPrice * 0.05;const shipping = Math.min(basePrice * 0.1, 100);return basePrice = quantityDiscount + shi..

함수 인라인하기 function getRating(driver) { return moreThanFiveLateDeliveries(driver) ? 2 : 1;}function moreThanFiveLateDeliveries(driver) { return driver.numberOfLateDeliveries > 5;} ▼ function getRating(driver) { return (driver.numberOfLateDeliveries > 5) ? 2 : 1;} 배경이 책은 목적이 분명히 드러나는 이름의 짤막한 함수를 이용하기를 권한다. 그래야 코드가 명료해지고 이해하기 쉬워지기 때문이다. 하지만 때로는 함수 본문이 이름만큼 명확한 경우도 있다. 또는 함수 본문 코드를 이름만큼 깔끔하게 리팩..