인파

You Can Become A

늦게 시작해도 누구든지 노력하면 개발자가 될수 있어요 !

공부한 내용을 정리합니다
Language/Java (JVM)

☕ 클래스는 언제 메모리에 로딩 & 초기화 되는가 ❓

JVM의 클래스 로더 (Class Loader) 자바의 클래스들이 언제 어디서 메모리에 올라가고 클래스 멤버들이 초기화되는지, 원리를 알기위해선 우선 JVM(자바 가상 머신)의 클래스 로더(Class Loader)의 진행 방식에 대해 알 필요가 있다. 특히나 다음과 같이 내부(중첩) 클래스 중에 static 키워드가 붙고 안붙고의 유무에 따른 메모리 로드 차이와 쓰레드에 세이프하다는 등, 이러한 부분은 꽤나 고수준의 지식이기 때문에 글 로만 훑어보고 넘어가기 다반사라 이를 이해하기 위해선 클래스 로더 부터 살펴볼 필요가 있다. class Outer { class Inner { } static class Holder { } } 클래스 로더는 컴파일 된 자바의 클래스 파일(*.class)을 동적으로 로드하고..

category_image
인파_
2022.10.31
(0)
Language/Java (JVM)

☕ 내부 클래스는 static 으로 선언 안하면 큰일 난다

Inner 클래스의 문제점 인텔리제이와 같은 IDE에서 내부 클래스를 선언하여 사용하면 다음과 같이 경고 메세지가 뜰 것이다. (내부 클래스가 외부의 멤버를 참조하여 사용하지 않을 경우) 메세지 내용을 보아하니 내부 클래스를 인스턴스가 아닌 static으로 설정하라는 경고이다. 별거 아닌 경고인줄 알고 무시하기에는, inner 클래스가 가지는 심각한 문제를 보면 마음이 바뀔 것이다. 왜냐하면 inner 클래스는 inner static 클래스보다 메모리를 더 먹고, 더 느리고, 바깥 클래스가 GC 대상에서 빠져 버려 메모리 관리가 안될 수 있기 때문이다. Inner 클래스는 외부 참조를 한다 일반적으로 내부 인스턴스 클래스를 만들기 위해서는 먼저 외부 클래스를 초기화한뒤 내부 클래스를 초기화해야 한다. 이..

category_image
인파_
2022.10.28
(0)
Language/Java

☕ 익명 클래스(Anonymous Class) 사용법 총정리

익명 클래스 (Anonymous Class) 익명 클래스는 내부 클래스(Inner class) 일종으로 단어 그대로 이름이 없는 클래스를 말한다. 익명, 이름이 없다는 것은 별로 기억되지 않아도 된다는 것이며, 나중에 다시 불러질 이유가 없다는 뜻을 내포한다. 즉, 프로그램에서 일시적으로 한번만 사용되고 버려지는 객체라고 보면 된다. (일회용 클래스) 보통 어느 클래스의 자원을 상속 받아 재정의하여 사용하기 위해서는 먼저 자식이 될 클래스를 만들고 상속(extends) 후에 객체 인스턴스 초기화를 통해 가능하다. // 부모 클래스 class Animal { public String bark() { return "동물이 웁니다"; } } // 자식 클래스 class Dog extends Animal { @..

category_image
인파_
2022.10.27
(0)
Language/Java

☕ 내부 클래스(Inner Class) 장점 & 종류 총정리

내부 클래스 (Inner Class) 내부 클래스(inner class)란 하나의 클래스 내부에 선언된 또 다른 클래스를 의미한다. 보통 사용자 클래스 자료형이 필요하면, 메인 클래스 외부에 선언하거나, 따로 독립적인 클래스 파일을 만들어 불러와 사용해 왔다. 내부 클래스는 대신 클래스 내에 선언되어 사용되며, 내부에 정의된다는 점을 제외하고는 일반적인 클래스와 다르지 않다. 우리가 어느 클래스에 변수나 상수가 필요하다면 클래스 멤버로서 클래스 내에서 선언하여 사용해 왔듯이, 선언 주체를 변수에서 클래스로 바꾼다면 그것이 내부 클래스인 것이다. 이처럼 내부 클래스는 보통 두 클래스가 서로 긴밀한 관계가 있거나, 하나의 클래스또는 메소드에서만 사용되는 클래스일 때 이용되는 기법이라고 보면 된다. 내부(in..

category_image
인파_
2022.10.26
(0)
Language/Java

☕ JAVA 업캐스팅 & 다운캐스팅 - 완벽 이해하기

자바의 참조형 캐스팅 하나의 데이터 타입을 다른 타입으로 바꾸는 것을 타입 변환 혹은 형변환(캐스팅) 이라고 한다. 자바의 데이터형을 알아보면 크게 두가지로 나뉘게 된다. 기본형(primitive type) - Boolean Type(boolean) - Numeric Type(short, int, long, float, double, char) 참조형(reference type) - Class Type - Interface Type - Array Type - Enum Type - 그 외 다른 것들 기본형(primitive) 이든 참조형(referece) 이든 하나의 타입이다. 이는 즉, 서로 타입간의 형변환(casting)이 가능하다는 말이다. 기본적으로 자바에선 대입 연산자 = 에서 변수 와 값 서로 ..

category_image
인파_
2022.10.25
(0)
Language/TypeScript

📘 타입스크립트 제네릭 타입 함수 분석 & 만들기

우리가 자바스크립트에서 많이 쓰이는 forEach() 나 map() 같은 고차함수는 타입스크립트에서도 당연히 사용할 수 있다. 하지만 타입스크립트에선 각 인수 마다 타입을 지정해주어야 돌아가는데, 기존의 자바스크립트 메소드에 어떻게 타입을 설정하였기에 타입스크립트에서도 고차함수에서 사용할 수 있는 것일까? 실제로 제네릭으로 타입이 지정이 되있어서 타입스크립트에서도 무리없이 사용이 가능한 것이다. 지금부터 실제로 타입스크립트에 설정되어있는 기존의 자바스크립트 고차함수가 제네릭으로 어떤식으로 설정되어있는지 하나하나 분석하면서 확실히 제네릭을 이해해보는 시간을 가져보자. 실전 라이브러리 제네릭 타입 분석하기 forEach 타입 분석하기 가장 많이 쓰이는 forEach 의 제네릭을 분석해보자. 다음 코드를 타입..

category_image
인파_
2022.10.22
(0)
Language/Java

☕ 인터페이스 vs 추상클래스 용도 차이점 - 완벽 이해

인터페이스 vs 추상클래스 비교 이 글을 찾아보는 독자분들은 아마도 이미 인터페이스와 추상클래스 개념을 학습한 뒤에 이 둘에 대하여 차이의 모호함 때문에 방문 했겠지만, 그래도 다시한번 확실하게 한번 더 짚고 넘어가보자. 추상 클래스 인터페이스 사용 키워드 abstract interface 사용 가능 변수 제한 없음 static final (상수) 사용 가능 접근 제어자 제한 없음 (public, private, protected, default) public 사용 가능 메소드 제한 없음 abstract method, default method, static method, private method 상속 키워드 extends implements 다중 상속 가능 여부 불가능 가능 (클래스에 다중 구현, 인..

category_image
인파_
2022.10.13
(0)
Language/Java

☕ 인터페이스(Interface) 문법 & 활용 - 완벽 가이드

인터페이스 정의 (친숙하게 설명) 객체 지향 프로그래밍의 추상화를 배우고 추상 클래스를 접해봤다면 그 다음 접해보는 것이 인터페이스(Interface) 일 것이다. 인터페이스는 간단히 말하자면 프로그램을 설계하고 조금 더 유연한 프로그램을 만드는 기법을 말한다. 인터페이스는 추상화와 상속과 더불어 다형성이라는 객체 지향의 특징을 구현하는 핵심이다. 실생활의 인터페이스 인터페이스(Interface) 라는 용어는 꼭 자바(java)에만 있는 것이 아니다. 위키 백과에 따르면, 인터페이스는 서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고받는 경우의 접점이나 경계면이라고 한다. 즉, 사용자가 기기를 쉽게 동작시키는데 도움을 주는 상호작용 시스템을 의미한다. 이러한 정의를 자바 프로그래밍에 접목해보..

category_image
인파_
2022.10.12
(0)
Language/Java

☕ 추상 클래스(Abstract) 용도 완벽 이해하기

추상 클래스 와 추상화 우리가 지금 까지 사용해왔던 일반적인 클래스는 구체적(concrete)으로 데이터를 담아 인스턴스화 하여 직접 다루는 클래스이다. 그 반대로 추상 클래스는 구체적이지 않은 추상적인(abstract) 데이터를 담고 있는 클래스이다. 그래서 추상 클래스는 일반 클래스와 달리 인스턴스 화가 불가능한 클래스이며, 추상 클래스를 선언 할때는 abstract 키워드를 사용한다는 차이점이 있다고 말하곤 한다. 하지만 착각하지 말아야 할 것이, 추상클래스의 문법적인 특징이나 객체 생성이 되고 안되고 이런 특징들은 중요한게 아니다. 추상 클래스가 무엇이고 왜 사용하는지 본질적인 개념부터 알아야 자연스럽게 객체 지향 프로그래밍의 추상 클래스 용도를 이해할 수 있다. 객체 지향 프로그래밍의 특징에 대..

category_image
인파_
2022.10.11
(0)
Language/Java

☕ 자바 객체 지향(OOP) 클래스 문법 - 한방 가이드

클래스(class) 구성 자바에서 클래스(class)란 객체를 정의하는 틀 또는 설계도와 같은 의미로 사용된다. 자바에서는 이러한 설계도를 가지고, 여러 객체를 생성하여 사용하는 식으로 프로그래밍을 이어나간다. 클래스는 객체의 속성 변수를 나타내는 필드(field)와 객체의 함수를 나타내는 메소드(method)로 구성되어있다. 클래스, 객체, 인스턴스, 메서드, 필드 등 자바 객체 지향 프로그래밍을 배우다 보면 정말 많은 용어들이 나온다. 특히 클래스나, 객체, 인스턴스 부분은 비슷하면서도 구분이 되어 있어 많이 혼동하는 편이다. 누군가에게 설명하기 위해서는 용어를 정확히 구분해서 사용해야하기 때문에 확실히 정리하고 넘어가자. 클래스 : 객체 데이터를 만드는 템플릿(설계도) 객체 : 클래스(템플릿)과 n..

category_image
인파_
2022.10.10
(0)
Language/Java

☕ JAVA 배열(Array) 완벽 다루기 가이드

배열 자료형 배열(array)은 프로그래밍에서 필수로 등장하는 요소이며 정말 자주 쓰이는 자료형이다. 배열은 하나의 블록안에 여러 데이터들을 모아 집합시켜 저장함으로써 데이터를 구조적으로 다루는데 도와준다. 배열을 구성하는 각각의 값을 배열 요소(element)라고 하며, 배열에서의 위치를 가리키는 숫자를 인덱스(index)라고 칭한다. 배열 선언 & 초기화 자바(Java)의 배열은 코드를 보면 볼 수 있듯이 배열을 선언할때 미리 공간의 갯수(길이)를 지정해야 한다. 이는 곧 공간의 제약이 생겨 데이터를 저장하는데 애로사항이 있을 수 있다는 뜻이기도 하다. 자바스크립트나 파이썬의 배열 같은경우 유기적으로 늘어나는 특성 때문에 배열에 데이터를 저장하는데 있어 공간을 따진적이 없었기 때문에 적응이 힘들 수도..

category_image
인파_
2022.10.07
(0)
Language/TypeScript

📘 타입스크립트 모듈 & 네임스페이스 시스템 이해하기

타입스크립트 모듈 시스템 모듈은 독립 가능한 기능의 단위이다. 프로그램은 여러 모듈로 구성되어 있고 모듈을 결합해 하나의 프로그램을 만든다. 모듈을 사용하면 다음과 같은 장점이 있다. 유지 보수의 용이성 : 중복 코드의 최소화 전역 스코프 오염을 방지 : 이름 공간이 파일 단위로 제한되어 전역 이름 공간을 침범하지 않음 재사용성 향상 : 모듈을 다른 프로젝트에 공유하여 재사용 가능 이처럼 모듈은 전역 변수와 구분되는 파일 자체 유효 범위(Local Scope)를 가진다. 이는 모듈 내 선언된 변수, 함수, 클래스 등을 명시적으로 내보내지 않는 이상 모듈 외부에서 접근할 수 없음을 의미한다. 예를들어 타입스크립트 프로젝트에 다음과 같이 index.ts , test/test.ts 두 파일이 있다고 하자. 그..

category_image
인파_
2022.10.06
(0)