문자열
char arr, char* arr2 같은 지역 변수와 문자열 변수는 메모리의 stack 영역에 있다. 하지만 공공재인 문자열 상수는 data 영역에 존재한다. 또한 char* 문자열은 재활용을 한다.
문자열은 마지막에 “\0”을 통해서 문자열을 구분한다. 모든 문자열은 \0가 맨 뒤에 생략되어 있다.
char arr[10];
char* arr2 = "abc"; //여기서 arr2는 a를 가리킴
JavaScript
복사
가비지 컬렉터(GC)의 알고리즘
가비지 컬렉터란?
가비지 컬렉터는 사용되지 않는 메모리를 다시 사용할 수 있도록 하는 역할을 한다. 가비지 컬렉터는 사용자가 인풋으로 준 클래스 파일을 실행하는 도중에 실행되며, Heap 영역에서 더 이상 참조되지 않는 메모리공간을 수거하여 메모리를 효율적으로 관리해주는 역할을 한다.
Mark and Sweep
가비지 컬렉터에는 Heap영역 외부에서 접근할 수 있는 변수나 오브젝트를 뜻하는 GC Root라는 것들이 있다. GC Root에서 시작되어 이 Root가 참조하는 모든 오브젝트와 그 오브젝트가 참조하는 다른 오브젝트들을 탐색해서 내려가면서 마크(Mark)한다.
이 탐색 중 마크하는 과정이 끝나면 가비지 컬렉터는 Heap영역 내부를 전체를 돌면서 마크되지 않은 메모리들을 해제한다. 이 과정을 Sweep이라고 부른다.
추상 클래스와 추상 메서드
자바에서는 하나 이상의 추상 메소드를 포함하는 클래스를 가리켜 추상 클래스(abstract class)라고 한다. 이러한 추상 클래스는 객체 지향 프로그래밍에서 중요한 특징인 다형성을 가지는 메소드의 집합을 정의할 수 있도록 해준다.
•
다형성이란?
→ 다형성이란 하나의 타입에 여러 객체를 대입할 수 있는 성질이다.
추상 메소드(abstract method)란 자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메소드를 의미한다.
추상 클래스를 사용하는 이유?
→ 여러명이 협업해서 작업하는 경우에 “이 클래스는 리모컨 전용이니 사용하지 마세요”라고 코드를 명시적으로 나타내기 위해서