Programming 19

Heap 메모리 구조와 GC는 어떻게 될까?

목표 : Heap 메모리와 GC에 대해 설명할 수 있다. 앞선 포스팅으로 JVM 내부 메모리 구조를 알아보았다. 그 중, Heap 메모리에 대한 상세한 설명을 추가하고자 한다. Garbage Collection Heap을 설명한다 했지만, GC부터 알아보려고 한다. Heap과 자연스럽게 연결될 것이며, 일단 용어를 좀 정리해야 설명하기 편할 것 같아서다. JVM은 자동으로 메모리를 관리해준다. GC는 더이상 사용되지 않는 인스턴스(Referrer가 없는 Object)를 찾아 메모리 할당을 삭제하는 행위이다. 이 말은 JVM에서는 GC가 자동으로 일어난다는 것이고, 성능에 중요한 역할을 한다. GC 혹은 메모리 설정이 잘못되면 금방 OOM(Out of Memory) Error가 발생할 것이다. 이 때 말하..

Programming/Java 2022.08.16

JVM의 메모리 구조는 어떻게 될까?

목표 : JVM 메모리 구조를 설명할 수 있다. JVM이 java Virtual Machine 이라는 것은 잘 알고 있다. 다만, 이 구조에 대해 설명을 하려고 하면, 쉽지 않은 부분이 있어 정리하고자 한다. 왜 자바가 많이 사용되었을까? 근본적인 질문일 수 있다. JVM을 설명하기 전에, Java의 특징 중 하나인 OS에 종속적이지 않다는 점을 설명하기 위한 질문이다. 그럼, OS에 어떻게 종속받지 않은 환경을 만들었을까? 어디에서든 Java가 돌아갈 수 있게 감쌀 무언가가 필요했고, 그게 바로 Java Virtual Machine 이라고 하는 JVM이다. Java는 컴파일 언어다. Java의 특징 중 또 다른 하나는 컴파일 언어라는 것이다. 컴파일 언어라 함은, 기계어로 번역하는 과정이 필요하며, 이..

Programming/Java 2022.08.15

자바스크립트 기초부터 모던 자바스크립트까지 - this편

목표 : 자바스크립트의 this를 사용할 수 있다. 우리가 객체를 공부할 때 크게 2가지로 나누어진다는 것을 알았다. 프로퍼티 : 객체의 상태를 나타내는 값(Data) 메서드 : 프로퍼티(상태 데이터)를 참조하고 조작할 수 있는 동작(Behavior) 위 두가지를 하나의 논리적인 단위로 묶은 복합적인 자료구조가 객체이다. 이 때, 메서드에서는 자신이 속한 객체의 상태(프로퍼티)를 알 수 있어야 한다. 그 말은, 자신이 속한 곳이 어디인지 지칭할 수 있어야 한다는 말이며, 자신이 속한 객체를 가리키는 식별자를 참조할 수 있어야 한다는 말로 귀결된다. 그 역할을 this 가 하고 있다. this 키워드 this는 자신이 속한 객체 또는 자신이 생성할 인스턴스를 가리키는 자기 참조 변수다. 주의해야 할 점은 ..

자바스크립트 기초부터 모던 자바스크립트까지 - 프로토타입편

목표 : 자바스크립트의 프로토타입을 설명할 수 있다. 앞서 계속해서 나오던 내용이 프로토타입이다. __proto__ 접근자 프로퍼티나, prototype 프로퍼티를 다루기도 했고, 이제 프로토타입에 대해 정확히 알아가볼 시간이다. 자바스크립트는 어떤 언어인가? 자바스크립트는 멀티 패러다임 언어다. 다시말해, 명령형, 함수형, 프로토타입 기반 객체지향 프로그래밍을 지원하는 멀티 패러다임 프로그래밍 언어다. 다시 보자. 자바스크립트는 프로토타입을 기반으로 한 객체 지향 프로그래밍 언어다. 자바스크립트는 객체 기반의 프로그래밍 언어로 자바스크립트를 이루고 있는 거의 모든 것이 객체다. 결국 다시 객체로 돌아온다. 이제 이 객체로 상속과 프로토타입에 대해 알아보자. 상속과 프로토타입 상속은 어떤 객체의 프로퍼티..

자바스크립트 기초부터 모던 자바스크립트까지 - 생성자편

목표 : 자바스크립트에서는 생성자를 어떻게 표현하는지 알아본다. 앞선 포스트에서 객체가 어떻게 생성되는지 알아본 적이 있다. 물론 객체 리터럴이 가장 생성하기 쉬운 방식이지만, Object 생성자 함수를 사용해 생성하는 방식에 대해 알아보자. 생성자 함수 생성자 함수(constructor)는 new 연산자와 함께 호출하여 객체(인스턴스)를 생성하는 함수다. 그리고, 생성자 함수에 의해 생성된 객체를 인스턴스(Instance)라고 한다. const person = new Object(); person.name = 'Lee'; person.sayHello = function() { console.log('Hi! My name is ' + this.name); } console.log(person); // {..

자바스크립트 기초부터 모던 자바스크립트까지 - 프로퍼티편

목표 : 객체 프로퍼티에 대해 알아보자. 객체는 자바스크립트의 핵심이다. (함수도 객체다) 이를 토대로, 프로토타입, this 등의 개념으로 확장시켜 나갈 예정이다. 먼저 자바스크립트에서 객체 프로퍼티의 숨은 요소들을 찾아보고, 이후에 함수와 생성자 개념으로 확장시켜 보자. 객체의 프로퍼티를 다시한번 꺼내보자. 먼저 프로퍼티가 무엇인가? 기억이 안날 수 있으니 되돌아가보자. 객체 상태를 나타내는 값(Data) 이다. 즉, Key:Value 로 되어 있으며, 객체는 0개 이상의 프로퍼티로 이루어진 집합이다. 자바스크립트 엔진은 객체의 프로퍼티를 생성할 때, 기본값으로 자동 정의하는 요소가 있다. const person = {a:1}; console.log(Object.getOwnPropertyDescrip..

자바 기초부터 모던 자바까지 - 스트림(stream)편

목표 : 람다를 기준으로 스트림 문법을 이해한다. 이전 포스팅으로, JAVA가 인터페이스를 통해 람다식을 어떻게 만들어 왔는지 히스토리를 보았다. 그리고, java에서는 앞서 배운 함수형 인터페이스의 주요 표현들인 Consumer, Function, Predicate, Supplier들이 어떻게 사용되어 지는지 Stream을 보면서 이해해보도록 하자. Stream(스트림) 부터 알아보자. 보통 Stream(스트림)이라는 단어는 어떤 데이터의 흐름을 뜻한다. 특히, java.io에서는 I/O 프로그래밍을 사용하는 클래스 명에 Stream이라는 단어를 사용하고 있다. 그러나, 지금 배우고자 하는 Stream은 주로 컬렉션 프레임워크나 이와 유사한 형태의 데이터를 처리할 때 도움을 줄 수 있는, 자바 8에서 ..

Programming/Java 2022.07.16

자바스크립트 기초부터 모던 자바스크립트까지 - 스코프편

목표 : 자바스크립트에서 스코프가 무엇인지 이해한다. 그냥 javascript라는 언어만 사용하다가, 어느 순간부터 공부를 하려고 하다보면, 언제나 맞닥드리는 부분이 스코프(Scope)다. 게다가 ES6에서 꽤 큰 변화가 있었기에, 그리고 javascipt만의 동작이 어떻게 되는지 알고싶다면 반드시 알아야 할 개념이다. 스코프(Scope)가 뭐지? 이전 포스팅에서 함수의 매개변수의 스코프에 대해 잠깐 다루었다. 매개변수를 참조할 수 있는 유효범위, 즉 매개변수의 스코프는 함수의 몸체 내부로 한정된다. 변수는 자신이 선언된 위치에 의해 자신이 유효한 범위, 즉 다른 코드가 변수 자신을 참조할 수 있는 범위가 결정된다. 정리해 보면, 모든 식별자(변수 이름, 함수 이름, 클래스 이름 등)는 자신이 선언된 위..

자바 기초부터 모던 자바까지 - 람다편

목표 : 람다가 필요한 이유와 자바에서 적용된 내용을 알아본다. 이전 함수형 프로그래밍 포스트에 이어서, 람다에 대해 하나씩 알아가볼 예정이다. 자바에 람다와 함수형 프로그래밍이 왜 필요하지? 아래와 같이 정리해보고자 한다. 이름 없는 함수를 선언할 수 있다. 메서드는 반드시 특정 클래스나 인터페이스 안에 포함되어야 하고 메서드의 이름이 있어야 하지만, 람다 표현식은 이러한 제약에서 벗어난다. 즉, 유연성이 생긴다. 소스 코드의 분량이 획기적으로 줄어들 수 있다. 반복적인 작업이 필요한 기존소스의 비효율성을 낮출 수 있다. 코드를 파라미터로 전달할 수 있다. 외부에서 동작을 정의해서 메서드에 전달할 때 편리하게 사용할 수 있다. 기존의 자바에서 탈피하여 지금 우리가 람다를 공부하는 이유다. 람다 표현식을..

Programming/Java 2022.07.06

자바스크립트 기초부터 모던 자바스크립트까지 - 함수편

목표 : 자바스크립트의 함수에 대해 알아본다. 자바스크립트에서 가장 중요한 개념이다. 스코프, 실행 컨텍스트, 클로저, this, 프로토타입, 모듈화 등 모두 함수에서부터 시작된다. 프로그래밍 언어에서 함수는 일련의 과정을 문(statement)으로 구현하고 코드 블록으로 감싸서 하나의 실행 단위로 정의한 것이다. 간단히 용어를 정리해보자. 매개변수(parameter) : 함수 내부로 입력을 전달받는 변수 인수 (argument) : 입력 출력 (return value) : 출력 function add(x, y) { // parameter return x+y; // return value } add(2,5); // argument 함수 리터럴 자바스크립트의 함수는 객체 타입의 값이다. 따라서 숫자 값을 ..