728x90
728x90

Programming Language 68

코틀린 기초 - 클래스 기초

"코틀린 완벽 가이드"라는 책을 보면서, 필요한 부분만 간추렸습니다. 버전이 달라지면서 변경된 부분이나, 잘못된 부분이 있을 수 있고 혹시 발견하게 되시면 지적은 언제나 환영합니다. 클래스 정의 class Person { var firstName: String = "" var familyName: String = "" var age: Int = 0 fun fullName() = "${this.firstName} ${this.familyName}" fun showMe() { println("${this.fullName()}: ${this.age}") } } 자바는 package private 이었지만, 코틀린 클래스는 기본적으로 public 자바와 달리, 코틀린에서는 클라이언트 코드를 바꾸지 않아도 원하는..

코틀린 기초 - 기초 문법

"코틀린 완벽 가이드"라는 책을 보면서, 필요한 부분만 간추렸습니다. 버전이 달라지면서 변경된 부분이나, 잘못된 부분이 있을 수 있고 혹시 발견하게 되시면 지적은 언제나 환영합니다. 기본 문법 일반 세미콜론으로 끝내지 않는다. 기본 스타일이고, 권장 스타일이니 이를 따르자. 타입 추론을 하며, 강타입 언어다. 주석 자바랑 기본적으로 동일함 단, 자바와 다르게 코틀린은 multiline 주석을 내포할 수 있음 변수 정의 val 불변 var 가변 자바와 다르게 코틀린은 대입문 연쇄(a = b = c )를 사용할 수 없다. 값을 돌려주지 않는다. 복합 대입 연산에도 해당한다. 모든 코틀린의 타입은 근본적으로 클래스 정의를 기반으로 만들어진다. a = 'a' 인 변수의 a + 5 대해서, 자바 : 결과를 암시적..

Java의 Stream에서 parallelStream은 stream보다 항상 빠를까?

결론부터 말하자면, 당연히 아니다. 병렬 처리라는 것이 단순히 작업을 쪼개서 수행하는 것에 그치는 게 아니라, 그것을 취합하는 과정도 있고 그 쪼개면서 발생하는 오버헤드, 컨텍스트 스위칭 등을 고려해야 하기 때문이다. ParallelStream Java8부터는 parallelStream(), parallel()만을 사용하고도 stream을 병렬 처리할 수 있게 한다. ForkJoinPool 관리 방식을 사용해서 복잡하던 스레드 관리 방식을 Fork와 Join을 통해서 작업들을 분할 정복(Divide and Conquer) 기법으로 처리한다. ParallelStream을 사용할 때 몇 가지 특징에 대해 알고 넘어가는 것이 좋다. 병렬 처리이기 때문에, 순서를 보장하지 않는다. 별도의 설정이 없으면 해당 어..

Garbage Collection in Python, 파이썬의 GC에 대해

Python에서의 GC 파이썬은 기본적으로 레퍼런스 카운팅(Reference Counting)을 바탕으로 GC를 수행하고 메모리를 관리한다. 레퍼런스 카운팅(Reference Counting)? 모든 객체는 참조 당할 때 이 레퍼런스 카운트를 증가시키고, 참조가 없어지면 이를 감소시킨다. 이 값이 0이 되면 객체가 메모리에서 해제된다. 해당 객체의 레퍼런스 카운트 값을 확인하는 코드는 다음과 같다. sys.getrefcount(obj) GC의 동작 원리 앞서 언급한 것처럼 GC는 레퍼런스 카운트를 기준으로 진행하는데, 좀 더 정확히 다루자면 세대와 그에 따른 임계값을 바탕으로 주기적으로 관리한다. 여기서 말하는 세대는 숫자가 클수록 오래된 객체이며, GC는 기본적으로 0세대, 즉, 비교적 최근에 생성된 ..

Java의 함수형 인터페이스(Functional Interface)에 대해 알아보기

함수형 인터페이스(Functional Interface)? 하나의 추상 메서드만 존재하는 인터페이스 람다 표현식에 사용할 수 있는 인터페이스 인터페이스 범위가 확장됨에 따라 여러 메서드가 정의되어 있을 수 있지만, 오직 하나의 추상 메서드만 존재한다면 함수형 인터페이스이다. 기본 형태 @FunctionalInterface public interface Consumer { void accept(T var1); default Consumer andThen(Consumer

JAVA에서 람다식(Lambda Expression)에 대해 정리해보기

람다식? 람다식 또는 람다 표현식(Lambda Expression)은 프로그래밍에서 흔히 사용되는 개념으로 익명 함수 등으로 불리기도 한다. 많은 프로그래밍 언어에서 람다식을 볼 수 있으며 Java에서는 이 람다 표현식을 Java8부터 추가되어 활용할 수 있다. 특징 기본 형태 (int param1, String param2) -> { DoSomething...} // 기본 (Parameter, ...) -> { DoSomething... } // 타입이 동일한 경우 () -> { DoSomething... } // 매개변수가 없는 경우 (Parameter, ...) -> DoSomething // 단일 실행문인 경우 (Parameter, ...) -> { return some; } // 단일 실행문이 ..

M1 맥북에서 파이썬 개발환경(아나콘다, 파이참) 설치하기

M1 실리콘 맥에서 파이썬 개발 환경을 설치해보자. 파이썬 개발 환경이라고 하면 대표적으로 사용하는 것이 아나콘다(Anaconda)와 파이참(Pycharm)일 것이다. 이 두 가지는 윈도우, 맥을 가리지 않고 사용하는 보편적인 툴이다. 아나콘다(Anaconda3) 설치하기 Anaconda | Individual Edition Anaconda's open-source Individual Edition is the easiest way to perform Python/R data science and machine learning on a single machine. www.anaconda.com 설치 순서는 상관 없지만, 먼저 아나콘다부터 설치해보도록 하자. M1 출시 초기에는 아나콘다 활용이 불가능하다는..

자바(Java)에서의 싱글톤(Singleton) 패턴에 대해 알아보자

Singleton이 무엇인가? Singleton은 어떤 클래스가 최초 한 번만 메모리에 할당하고(Static) 그 메모리에 대해서 객체를 만들어 사용하는 디자인 패턴이다. 생성자 호출이 반복적으로 발생한다고 하더라도, 새로운 인스턴스를 생성하는 것이 아니라 최초 생성된 인스턴스를 반환해주는 것을 말한다. Singleton을 왜 사용하는가? 고정된 메모리 영역을 얻으며 생성된 인스턴스를 계속 사용하기 때문에 메모리 낭비를 방지할 수 있으며, 생성된 인스턴스는 전역 인스턴스이기 때문에 다른 클래스의 인스턴스들이 데이터를 공유하기가 쉽다고 한다. DBCP(DataBase Connection Pool) 같이 공통된 객체를 여럿 생성해 사용해야할 때 많이 사용한다. Singleton 사용 시 조심해야 되는 부분 ..

자바(Java)와 메모리(Static, Stack, Heap)에 대한 정리

코드를 조금 더 실용적으로 작성하기 위해선 JVM의 메모리 영역들에 대한 이해가 필요하다. 모든 것을 다 Heap이나 Stack에 밀어 넣고 인스턴스 생성과 Thread Safe에 대해 고려하지 않는 등의 행위는 적절하지 않기 때문이다. 메모리 영역에 대한 이해와 그를 바탕으로 한 코드 설계는 개발자가 더 나은 코드를, 그로 인해 더 나은 개발자가 되기 위해서는 필수적이다. 세부적으로 따지면 코드 영역 같은 것도 있고 하지만, 크게 이렇게 다루고 신경써줘야 하는 부분은 static, stack, heap이다. 각 영역마다 특징적인 것들이 있고, 그렇다 보니 그 특징들을 고려해서 코드를 작성해야 인스턴스의 불필요한 생성을 방지하고, Thread Safe를 보장할 수 있으니 잘 짚고 넘어가는 것이 필요하다...

Jupyter-Notebook PDF 저장 시 오류 nbconvert failed: xelatex not found on PATH 문제 해결 방법

과제 제출 과정에서 Jupyter Notebook 실행 결과를 PDF로 제출해야 했다. Jupyter Notebook에서 바로 LaTex를 이용해서 PDF로 저장을 눌렀더니 에러와 함께 아래 문구가 나왔다. nbconvert failed: xelatex not found on PATH 이 문제 해결 방법은 간단하다 에러 문구와 함께 같이 뜨는 사이트로 이동해서 MiKTeX를 설치해주면 그만이다. 각 환경에 맞는 프로그램을 사용해 설치만 진행하면 PDF 저장이 가능해진다. https://miktex.org/download Getting MiKTeX - MiKTeX.org The MiKTeX Setup Utility is used to download, install and uninstall MiKTeX u..

728x90