프로그래밍 언어 15

Build

BuildBuild는 소스 코드와 리소스를 컴파일하고, 테스트 및 패키징하여 실행 가능한 형태로 만드는 과정입니다. 개발자가 작성한 코드를 컴퓨터가 이해하고 실행할 수 있는 형태로 변환하는 필수적인 작업입니다.Kotlin BuildKotlin Build Process를 그림으로 나타내면 다음과 같습니다. Kotlin 또한 JVM위에서 동작하기 때문에 Java의 빌드 과정과 매우 유사합니다. Java는 .java 파일을 Java Compiler를 통해 .class 파일로 변환을 하고 Kotlin은 .kt 파일을 Kotlin Compiler를 통해 .class 파일로 변환을 합니다. 해당 파일은 .class 파일은 Kotlin Runtime Library에 의존되어 실행합니다. (Kotlin Runtime..

Companion Object

Companion Objectcompanion object에 대한 정리에 앞서 먼저 Java의 어떤 기능과 유사한지부터 알아보겠습니다. Java에는 static 키워드가 존재합니다. 해당 키워드가 붙은 변수가 메소드는 클래스 로드 시에 메모리에 할당되며, 프로그램 종료 시까지 유지가 됩니다. 또한 모든 인스턴스에 공유되는 특징을 가지고 있습니다. Kotlin에서는 static이라는 키워드가 존재하지 않습니다. 대신 companion object 키워드를 가지고 static 키워드를 대신해 처리를 하고 있습니다. 먼저 Java의 코드를 살펴보겠습니다.public class Test { public static int count = 0; public static void print(){ ..

Nested Class, Inner Class

Nested Class, Inner ClassNested Class, Inner Class에 대한 예시를 간단하게 Java에서 어떻게 사용되는지 확인해보겠습니다.//외부 클래스public class Outer{ private int number; //정적 중첩 클래스 public static class NestedClass{ } //내부 클래스 public class InnerClass{ }} 먼저 클래스 내부에 클래스를 선언하는 것을 중첩 클래스라고 합니다. Java에서는 static 키워드 유무에 따라 중첩 클래스를 분류할 수 있습니다. static이 붙은 경우에는 정적 중첩 클래스(Static Nested Class)라고 칭하며 특징은 다음과 같습니다.Outer 클래스의 인스턴스가 없어도 생성이 가..

Null 처리

NullKotlin에서 Null 처리는 주요한 특징 중 하나로, 안전한 Null 처리를 통해 NPE 문제를 효과적으로 예방할 수 있습니다. 해당 특징에 대해 깊이 있게 설명해보겠습니다.Nullable, Non-NullableKotlin은 모든 변수와 타입을 Nullable, Non-Nullable으로 명확히 구분하는 특성이 있습니다.Nullable는 null 값을 가질 수 있는 반면에 Non-Nullable은 null 값을 가질 수 없습니다.//null 불가, null을 넣을 시 컴파일 에러val name1: String = "name1"//null 가능val name2: String? = null 안전 호출 연산자 - ?.?. 연산자는 Nullable 타입에서 안전하게 접근할 수 있도록 돕는 안전 호출..

Scanner, BufferedReader

알고리즘 문제를 풀이 할때 입력값을 받기 위해서 주로 Scanner와 BufferedReader를 사용했습니다. 그런데 최근에 메모리 초과가 발생했을 때 때 Scanner에서 BufferedReader로 교체를 하니 메모리 문제가 해결된 경험이 있습니다. 이를 계기로 Scanner와 BufferedReader에 대해 정리를 해보겠습니다.ScannerScanner 클래스는 입력받은 데이터(바이트)를 다양한 타입으로 변환하여 반환하는 클래스입니다. 간단하게 기본형과 String 타입을 정규표현식을 사용해 파싱할 수 있습니다.java.util 패키지에 속합니다. (java.util.Scanner)공백(띄어쓰기) 및 개행(줄 바꿈)을 기준으로 읽는다.(' ', '\t', '\r', '\n' 등) 원하는 타입으로..

비동기

Thread이 전에 Thread에 대한 개념과 간단한 사용법을 포스팅을 했었습니다. 이 번에는 좀 더 디테일하게 자바에서 제공하는 비동기에 대해서 학습한 내용과 예시 코드를 정리해보겠습니다. 간단하게 스레드를 생성하고 실행하는 클래스입니다. Runnable, Task를 상속받은 클래스를 사용해도 되고, 익명 객체 + 람다 형식으로도 사용할 수 있습니다. 해당 스레드를 종료하기 위해서는 interrupt() 함수를 사용하면 됩니다. interrupt() 메소드는 스레드가 일시 정지 상태에 있을 때 InterruptedException 예외를 발생시키는 역할을 합니다. 이것을 이용하면 Thread의 run() 메소드를 정상 종료시킬 수 있습니다.public static void main(String[] ar..

Thread

Process프로세스란 애플리케이션을 실행하면 운영체제로부터 실행에 필요한 메모리를 할당받아 애플리케이션이 실행되는데, 이를 프로세스라고 합니다. 하나의 애플리케이션은 멀티 프로세스를 만들기도 합니다. 예를 들어 메모장 애플리케이션을 2개 실행했다면 2개의 메모장 프로세스가 생성된 것입니다. Thread운영체제는 두 가징 이상의 작업을 동시에 처리하는 멀티 태스킹을 할 수 있도록 CPU 및 메모리 자원을 프로세스마다 적절히 할당해주고, 병렬로 실행시킵니다. 하나의 프로세스가 두 가지 이상의 작업을 처리하는 방법은 멀티 스레드입니다. 스레드는 하나의 코드 실행 흐름이기 때문에 한 프로세스 내에 스레드가 2개라면 2개의 코드 실행 흐름이 생긴다는 의미입니다. 멀티 프로세스는 운영체제에서 할당받은 자신의 메모..

ConcurrentHashMap

이 번에는 안전한 멀티 스레드 환경을 만들기 위해 Java에서 제공하는 ConcurrentHashMap에 대해 학습한 내용을 정리해보겠습니다.ConcurrentHashMapConcurrentHashMap은 Java에서 동시성 기능을 제공하는 Map 자료구조입니다. 먼저 간단하게 테스트를 진행한 후에 구현부에 대해서 정리해보겠습니다. 테스트 코드는 다음과 같습니다.import java.util.HashMap;import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class concurrent { public stati..

LinkedHashMap

LinkedHashMap알고리즘을 공부하면서 HashMap에 대해서 학습하고 사용해 본 경험이 있습니다. 그런데 최근에 레퍼런스를 참고하는 과정에서 LinkedHashMap을 자주 보게되었습니다. 이번 기회에 LinkedHashMap에 대해서 학습한 내용을 정리해보겠습니다. LinkedHashMap에 대해서 정리하기 전에 간단하게 Map에 대해서 정리해보겠습니다. Map은 key, value 형태로 데이터를 저장하는 자료구조입니다. key를 기준으로 value를 저장하는 형태입니다. HashMap은 key를 Hash Method를 이용해 계산을 수행한 후, 그 결과값을 배열의 인덱스로 사용하여 저장하는 자료구조입니다. 그럼 LinkedHashMap은 어떤 자료구조일까요? 바로 순서라는 개념이 포함되어 있..

equals()

equals(), ==이 번에는 equals() 동작에 대해 공부한 내용을 정리해보겠습니다. equals()하면 == 과의 비교가 대표적으로 떠오릅니다. equals()는 값에 대한 비교를 하며 == 은 참조하는 주소를 비교합니다. 그럼 equals()는 실제로 값 비교를 어떻게 하는 지에 대하여 학습한 내용을 정리하겠습니다.equals()실제 equals()가 작동하는 코드를 보면서 하나하나 파헤져 보겠습니다.public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String aString = (String)anObject; if (coder() ==..