본문 바로가기

분류 전체보기

(99)
메모리의 구조 프로그램이 실행되기 위해서는 우선 프로그램이 메모리에 로드 되어야 한다. 뿐만 아니라 프로그램에 선언된 변수들을 저장할 메모리도 필요하다. 따라서 컴퓨터에 설치된 OS(운영체제)는 프로그램의 실행을 위해 다양한 메모리를 제공하고 있으며, 운영체제로부터 프로그램이 할당받는 메모리는 크게 네가지로 구분한다. 1) 코드 영역 2) 데이터 영역 3) 스택 영역 4) 힙 영역 코드(Code) 영역 코드(code) 영역은 실행할 프로그램의 코드가 저장되는 영역이다. 텍스트(code) 영역이라고도 부른다. CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리한다. 개발자가 작성하는 코드라고 생각하면 쉽다. 함수나 제어문, 상수 등이 이에 포함될 수 있다. 데이터(Data) 영역 데이터 영역은 전역변수와 정적(s..
[JavaScript] 함수형 프로그래밍(2) 이전 포스팅에서 "쏙쏙 들어오는 함수형 코딩"이라는 책을 소개하였고, 이제 두번째 파트로 이어나간다. [JavaScript] 함수형 프로그래밍(1) 요즘 흥미롭게 읽고 있는 책이 하나 있는데, 함수형 프로그래밍에 대해 알려주는 책이다. 무슨 개발이 되었든 함수를 사용하여 코드를 작성해두면 어떤 로직을 재사용하기 편리한 것 같다. 가령 beautify-log.tistory.com 기존에 있는 코드에 함수형 프로그래밍을 적용시킬 수 있다. 코드를 읽을 때 액션, 계산, 데이터 관점으로 읽는 연습이 필요하다. function figurePayout(affiliate) { let owed = affiliate.sales * affiliate.commissions; if (owed > 100) { sendPayo..
[JavaScript] 함수형 프로그래밍(1) 요즘 흥미롭게 읽고 있는 책이 하나 있는데, 함수형 프로그래밍에 대해 알려주는 책이다. 무슨 개발이 되었든 함수를 사용하여 코드를 작성해두면 어떤 로직을 재사용하기 편리한 것 같다. 가령 쇼핑몰에서 사용자가 구매할 물건을 장바구니에 넣는 로직을 작성한다고 할 때 /** 사용자가 고르려 하는 상품 **/ const goods = { id: 200, name: "식기세척기", price: 560000, isPurchasable: true } /** 장바구니 배열 **/ const cart = []; /** 장바구니에 사용자가 선택한 상품을 추가하는 함수 **/ function addGoodsToCart(product) { cart.push(product) } /** 카트 버튼 **/ const btnAddC..
[JavaScript] 배열에 사용하는 반복문과 배열 메소드 비교하기 배열에 적용하여 쓸 수 있는 반복문과 배열 메소드를 대략 살펴보면 for문, while문 그리고 map, forEach가 있다. 이게 전부는 아니지만 자주 쓰이므로 각각의 차이에 대해 정리할 필요가 있다고 생각한다. 1. 반복문 우선 어느 프로그래밍 언어든 처음 배울 때 나오는 핵심 내용, 바로 반복문이다. 큰 맥락으로 구분해보면 for문, while문이 있다. do...while 같은건 어차피 while이랑 모양이 비슷하니 for와 while 두개로 크게 나눈다고 가정한다. 예를 들어 1부터 10까지 담긴 배열 numArr이 있다고 하자. const numArr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 반복문을 사용하여 이 배열 안에 있는 원소를 하나씩 출력하는 케이스를 만든다면 ..
[Kotlin] 엘비스 연산자(Elvis Operation) 코틀린의 엘비스 연산자는 ?:로 나타내며, ?:의 왼쪽 값이 null이면 ?:의 오른쪽 값을 리턴한다. 예를 들어 어떤 문자열의 길이를 구하는 함수를 구현한다고 할 때, 길이를 구하고자 하는 문자열의 null 여부를 if - else로 확인할 수 있다. fun calculateLength(str: String?): Int { val length: Int = if (str != null) str.length else -1 return length } calculateLength 함수를 임의의 문자열에 적용해보면 다음과 같은 결과를 얻을 수 있다. fun main(args: Array) { val notNullString: String? = "Hello Kotlin!" val nullString: Strin..
[Flutter] 왜 Flutter? Flutter는 Google이 만든 오픈 소스 크로스 플랫폼 GUI 애플리케이션 프레임워크이다. 지구상에서 수많은 사람들이 사용하는 모바일 OS는 크게 양분화해보면 Apple의 iOS와 Google의 Android이다. 두 OS 시장에 어떤 서비스를 개발하여 출시하고자 한다면 Swift와 Kotlin(또는 Java)으로 앱을 각각 개발해야 하고, 이를 각 스토어에 출시하면 된다. 스타트업처럼 규모가 작은 회사라면 두개의 OS에 대응하여 독립적으로 개발하는 것은 어찌보면 힘들 수 있다. 각 언어를 사용할 줄 아는 개발자를 구해야 하고, 한 쪽의 개발자가 다양한 이슈에 직면하게 되면 개발 기간은 지연되게 된다. 하나의 코드로 Android와 iOS를 모두 대응할 수는 없을까? 이 질문에 대한 대답으로 Rea..
[Java] 두 날짜의 차이 구하기 Python을 사용하면 날짜간의 차이를 쉽게 구할 수 있지만, 자바는 문자열로 선언된 날짜를 포매터로 파싱해 주고 Date 객체를 통해 생성된 숫자로 별도 연산을 해주어야 한다. from datetime import datetime now = datetime.now() print(now) # 2022-08-24 13:03:28.525645 past = datetime.strptime("20210305", "%Y%m%d") print(past) # 2021-03-05 00:00:00 diff_days = now - past print(diff_days) # 537 days, 13:03:28.525645 # 며칠 차이 나는지 print("diff_days : ", diff.days) # 차이가 나는 일 수를..
[Java] HashMap은 값이 들어가는 순서를 보장하지 않는다 자바의 컬렉션 중 Map 인터페이스를 구현한 대표적인 예시가 HashMap이라고 할 수 있다. HashMap은 key와 value를 쌍으로 가지는 Entity 객체를 담는 자료구조이다. key와 value는 각각 객체이다. value는 중복될 수 있지만, key는 중복될 수 없는 것이 특징이다. 만약 기존에 있던 key와 동일한 key로 value를 저장하게 되면 기존에 있던 값은 삭제되고 새로운 값이 들어가게 된다. 이름처럼 Hashing을 사용하기 때문에 많은 양의 데이터를 검색할 때 높은 성능을 보인다. 그런데 HashMap은 hash 함수를 사용하여 값을 저장하기 때문에, 사용자가 값이 저장되는 위치를 알기 어렵고 값이 들어가는 순서는 위치와 무관해지게 된다. 예를 들어 import java.ut..