책정리 51

자바스크립트에서의 함수, 동작 방식

프로그래밍 언어에서의 함수는 일련의 과정을 statement로 구현하고 코드 블록으로 감싸서 하나의 실행 단위로 정의한 것이다. 함수 내부에는 매개변수와 반환값으로 구성되어 있다. 함수를 사용하게 되면 필요할 때 여러번 호출할 수 있어 코드의 재사용 측면에서 유리하다. 코드를 재사용하게 된다면 유지보수가 편하고, 코드의 신뢰성과 가독성 면에서 유리하다. 함수 정의 방법 자바스크립트에서 함수를 정의하는 방법은 크게 4가지가 있다. function add(x, y) { return x + y; } // 1. 함수 선언문 var add = function(x, y) { return x + y; } // 2. 함수 표현식 var add = new Function('x', 'y', 'return x+y'); //..

자바스크립트에서 undefined와 null의 차이

var score; 다음과 같이 변수를 선언할 때, 자바스크립트는 해당 메모리 공간을 undefiend로 초기화한다. 따라서 변수를 선언한 이후 값을 할당하지 않으면, undefined가 반환된다. 따라서, 변수를 참조했을 때 undefined가 반환된다면, 선언 이후 값이 할당된 적 없는 초기화되지 않은 변수라는 것을 알 수 있다. null은 이와 다르게 변수에 값이 없다는 것을 명시하고 싶을 때 사용해야 한다. 변수에 null을 할당하는 것은 이전에 할당되어 있던 값에 대한 참조를 명시적으로 제거하는 것이며, 자바스크립트 엔진은 이 공간에 대해 가비지 콜렉션을 수행할 것이다. 예시로, document.querySelector 메서드는 조건에 부합하는 HTML 요소를 검색할 수 없을 경우 null을 반..

자바스크립트에서의 변수 선언, 호이스팅, 동작 방식과 그 원리

변수 선언 변수 선언이란, 메모리 공간을 확보하고 변수 이름과 확보된 메모리 공간의 주소를 연결하여 값을 저장할 수 있도록 준비하는 것이다. 변수 선언에 의해 확보된 메모리 공간은 확보가 해제되기 전까지는 누구도 확보된 메모리 공간을 사용할 수 없도록 보호된다. var, let, const 키워드를 사용하여 변수 선언 한다. let, const 키워드는 var 키워드의 여러 단점을 보완하기 위해서 ES6에서 도입되었다. 변수 선언을 할 때 자바스크립트 엔진에서 하는 일 var score; 선언 단계 : 변수 이름을 실행 컨텍스트에 키/값 형식인 객체로 등록한다. 자바스크립트 엔진에 변수의 존재를 알린다. 초기화 단계 : 값을 저장하기 위해 메모리 공간을 확보하고 암묵적으로 undefined를 할당해 초기..

자바스크립트의 역사, 특징, 관련 용어 정리

자바스크립트의 역사 태초의 웹 페이지 로딩 방식 => html태그로 시작해서 html 태그로 끝나는 완전한 HTML 코드를 서버로부터 전송받아 웹 페이지 전체를 렌더링하는 방식 화면 전환이 될 때, 변경필요가 없는 부분까지 필요한 HTML 코드를 다시 전송받기 때문에 성능적으로 불리하다. Ajax의 등장 => 서버로부터 필요한 데이터만 전송받아 변경해야 하는 부분만 한정적으로 렌더링하는 방식 웹 브라우저에서 빠른 성능과 부드러운 화면 전환이 가능해졌다. SPA 프레임워크의 등장 SPA란? Single Page Application의 약자로, 단일 페이지 어플리케이션을 의미한다. 웹 사이트 전체 페이지를 하나의 페이지에 담아 동적으로 화면을 변경해 표시해주는 기술로, 매번 새롭게 페이지를 렌더링해서 제공해..

[클린코드] 1. 깨끗한 코드란 대체 무엇인가?

이 글은 클린코드(애자일 소프트웨어 장인 정신)-로버트 C.마틴의 책 1장 깨끗한 코드를 읽고 정리한 글입니다. 목차 코드의 중요성 나쁜 코드의 문제점 우리가 가져야 할 태도 깨끗한 코드란 대체 무엇인가? 코드의 중요성 코드는 요구사항을 상세히 표현하는 수단이다. 우리는 요구사항을 만족하는 프로그램을 구현하기 위해서 언어를 선택하고, 해당 언어를 사용하여 코드를 짠다. 프로그래밍 언어의 추상화 수준은 점차 높아지고 있지만, 코드가 사라지진 않을 것이다. 예를 들어서 여러 추상화되어 제공되는 자료구조 (heap, list등), 머신러닝을 위한 tensorflow library 등에서는 이미 우리가 짜야하는 상당한 수준의 코드를 추상화 해놓았다. 그러나, 그렇다고 해서 짜야하는 코드의 양이 아예 사라지지는 ..

[Kotlin in Action] 애노테이션과 리플렉션

이 포스팅은 Kotlin in Action 책의 10장을 정리한 글 입니다. Annotation과 Reflection을 사용하면 실행 시점에 컴파일러 내부 구조를 분석할 수 있다. 10.1 애노테이션 선언과 적용 10.1.1 애노테이션 적용 자바와 똑같은 방식으로 @를 붙여서 사용 @Deprecated("Use removeAt(index) instead", ReplaceWith("removeAt(index)")) fun remove(index: Int) { ... } 자바와의 차이 클래스를 애노테이션 인자로 지정할 때 @MyAnnotaion(MyClass::class) 인자로 들어가는 애노테이션의 이름 앞에는 @를 넣지 않는다. 배열을 인자로 지정하려면 arrayOf 함수를 사용한다. 어노테이션 인자는 ..

[Kotlin in Action] 컬렉션과 배열, (MutableCollection, 자바와의 관계)

6.3 컬렉션과 배열 코틀린의 컬렉션 지원과 자바와 코틀린 컬렉션 간의 관계 6.3.1 널 가능성과 컬렉션 List와 List?의 차이 (1) : 리스트 자체는 널이 아니다. 리스트에 들어있는 각 원소는 널이 될 수 있다. (2) : 리스트 자체가 널이 될 수 있다. 리스트에 들어있는 원소는 널이 될 수 없다. 널 값 거러내기 // List -> List val validNumbers = numbers.filterNotNull() 6.3.2 읽기 전용과 변경 가능한 컬렉션 kotlin.collections.Collection : 컬렉션 안의 데이터 접근 kotlin.collections.MutableCollection : Collection 인터페이스 확장 & add, remove, clear 메소드 제..

[Kotlin in Action] 코틀린의 원시 타입, Any, Unit, Nothing 타입

6.2 코틀린의 원시 타입 코틀린에서는 널이 될 수 있는지 여부를 타입 시스템에 추가함으로써 컴파일러가 컴파일 시 미리 감지하여 발생할 수 있는 예외의 가능성을 줄일 수 있다. 6.2.1 원시 타입: Int, Boolean 등 Java에서 원시 타입과 참조 타입의 차이 : 변수가 직접 들어가는 지 / 메모리상의 객체 위치가 들어가는 지 Integer는 래퍼 타입으로 메소드 등을 호출할 수 있다. Kotlin에서는 구분이 없고, 원시 타입에 대해 메소드를 호출할 수 있다. 대부분의 경우 자바 int 타입으로 컴파일 된다. 불가능할 경우 (컬렉션 사용 등) Integer 래퍼 타입으로 객체가 들어간다. 6.2.2 널이 될 수 있는 원시 타입: Int?, Boolean? 등 자바의 래퍼 타입으로 컴파일된다. ..

[Kotlin] 클래스와 프로퍼티, Enum 클래스 - Java와 비교하기

[Kotlin] 클래스와 프로퍼티, Enum 클래스 - Java와 비교하기 클래스 코틀린에도 자바에 존재하는 클래스라는 개념이 존재한다 다른 부분은 클래스 선언 및 정의가 조금더 '간단' 하다는 점이다. class Person(val name: String, var age: Int, val address: String)과 같이 한 줄에 여러 필드를 선언할 수 있다. 프로퍼티 자바에서는 '필드'와 '접근자'를 묶어 프로퍼티라고 부른다. 코틀린에서는 프로퍼티를 기본 기능으로 제공하여 자바의 필드와 접근자 메소드를 완전히 대신한다. 자바에서는 게터와 세터를 제공해야 필드를 접근하고 변경할 수 있다. 코틀린에서는 값을 저장하기 위한 비공개 필드와 세터 및 게터 구현을 제공한다. class Person( val ..

[Kotlin] 함수와 변수 - Java와 비교하기

변수 코틀린에서는 크게 변경 가능한 변수와 변경 불가능한 변수가 있다. 변경 불가능한 변수 (val) 변경 불가능한 (immutalbe) 참조를 지정하는 변수다. 자바에서는 final에 해당한다. 변경 가능한 변수 (var) 변경 가능한 (mutalbe) 참조를 지정하는 변수다. 자바의 일반 변수에 해당한다. val age: Int = 24 // (1) val languages = arrayListOf("Korean", "English") // (2) languages.add("French") var name = "Boggling" name = 42 // (3) Error : type mismatch, 컴파일 오류 발생 1 'val' 변경 불가능한 변수 명시 Int 형 변수임을 명시 2 'val' 변경 ..