본문 바로가기

프로그래밍248

[kotlin] 코틀린 차곡차곡 - 7. NPE(NullPointException) 안전하게 코딩하기 안녕하세요. 오늘은 코틀린이 NPE에서 안전할 수 있는 언어적인 특성에 대해서 알아보도록 하겠습니다 ! NPE(NullPointerException) 문제 null 이라는 개념은 1965년 ALGOL W의 창시자 Tony Hoare에 의해서 발명되었다고 합니다. 그리고 2009년 소프트웨어 컨퍼런스에서 null에 대해서 개념상 편해서 만들어졌으며 스스로 1조원 짜리 실수(The Billion Dollar Mistake) 평가했습니다. 여러분이 기존에 Java 언어로 개발을 해보셨다면 NullPointerException을 한번쯤은 경험해 보셨을 것이라고 생각되어집니다. NullPointerException은 기본적으로 객체에 값이 할당되지 않았을 때(nul 일 경우) 해당 값을 호출하면 발생하는 에러입니.. 2021. 6. 20.
[kotlin] 코틀린 차곡차곡 - 6. 클래스 - static(companion)과 접근 제어자 안녕하세요. 오늘은 코틀린 차곡차곡 6번째 시간입니다. 오늘은 이전 시간에 이어서 코틀린 클래스에 대해서 알아보는 3번째 시간이자 마지막 시간입니다. 마지막까지 잘부탁드립니다. :) 정적 클래스 ( static class ) 클래스 내부에 정적 클래스 및 변수를 선언하기 위해서는 companion 키워드를 사용하면 됩니다. companion 클래스를 선언하고 그 내부에 변수 및 함수를 선언하면 이곳에 선언된 요소들은 객체를 만들지 않고도 바로 접근이 가능합니다. 아래코드를 통해 companion object를 좀 더 알아보도록 하겠습니다. 아래 코드는 companion object에 2개의 함수와 1개의 정적 변수를 선언해서 사용하고 있습니다. 이 예제는 정적 함수를 사용하여 객체 생성시에 validat.. 2021. 6. 19.
[kotlin] 코틀린 차곡차곡 - 5. 클래스 - 상속과 인터페이스 안녕하세요. 코틀린 차곡차곡 5번째 시간입니다. 오늘은 이전 시간에 이어서 코틀린의 클래스 기본에 대해서 알아보는 시간을 가져보도록 하겠습니다. 상속(Inheritance) 상속이란 클래스를 설계할 때 외부 클래스를 틀로 가지고 와서 제작하는 기법을 말합니다. 즉, 상속을 이용하면 기 기반이 되는 클래스의 구성요소를 다시 선언하지 않고 사용할 수 있어서 중복을 막을 수 있습니디. 이러한 상속 기법을 코틀린에서는 제공하고 있습니다. 상속에는 상속을 사용하는 클래스와 상속의 대상이 되는 클래스가 필요합니다. 각각을 자식(Derived), 부모(Base) 클래스라고 부릅니다. 코틀린의 상속에는 2가지가 필요합니다. 첫번째는 부모클래스 및 함수, 그리고 맴버변수를 open 키워드로 상속을 가능하게 해주는 것입니.. 2021. 6. 15.
[kotlin] 코틀린 차곡차곡 - 4. 클래스 - 기본 구성요소 안녕하세요. 코틀린 차곡차곡 4번째 시간입니다. 오늘은 코틀린 클래스의 기본에 대해서 알아보는 시간을 가져보도록 하겠습니다. 클래스는 내용이 많기 때문에 한번에 모든 것을 설명드리는 것은 힘들것이라고 생각하며 2번에 나눠서 알아보는 시간을 가져보도록 하겠습니다. 클래스 (Class) 클래스란 객체를 정의하는 틀 또는 설계라는 의미를 가지고 있습니다. 이러한 개념은 여타 언어와 마찬가지로 코틀린도 동일합니다. 아래에서 코틀린 클래스의 내부 구성을 보도록 하겠습니다. 클래스 선언 키워드 class 키워드를 통해 클래스를 선언할 수 있습니다. 클래스 이름 클래스 이름을 쓰며 일반적으로 파스칼케이스(PascalCase)를 이름 규칙으로 가져갑니다. 기본 생성자 클래스 이름 옆에 생성자 키워드 constructo.. 2021. 6. 13.
[kotlin] 코틀린 차곡차곡 - 3. 함수 안녕하세요. 코틀린 차곡차곡 3번째 시간입니다. 오늘은 코틀린 함수의 기본에 대해서 알아보는 시간을 가져보도록 하겠습니다. 오늘 배울 부분은 자바의 method에 대응되는 코틀린의 function 이며 함수형프로그래밍과는 상관이 없음을 미리 알려드립니다. function 코틀린에서 하나의 기능을 구현한 명령어의 집합을 함수(function) 이라고 부릅니다. 자바에서 메서드(Method)에 대응되는게 코틀린에서는 함수라고 생각해주시면 됩니다. 이런 코틀린의 함수의 구성은 아래와 같습니다. 키워드(keyword) - 함수를 선언하시기 위해서는 먼저 fun 키워드를 통해 함수를 선언하겠다는 것을 명시하셔야합니다. 함수 이름 - 그리고 한칸 띄우고 함수이름을 명시해야합니다. 함수 이름은 자바와 마찬가지로 ca.. 2021. 6. 6.
[kotlin] 코틀린 차곡차곡 - 2. 조건문과 루프문 안녕하세요. 오늘은 여러분들과 함께 코틀린(kotlin)에서 조건문과 루프문, label, exception 등을 통해 흐름 제어(control flow)를 하는 방법에 대해서 알아보는 시간을 가져보고자 합니다. 조건문 ( if ) 코틀린에서 if 는 식표현(expression)입니다. 그렇기 때문에 반환 값을 가질 수 있습니다. 물론 일반적으로 구문 (statement) 처럼 사용할 수도 있습니다. 또한 if가 식표현이기 때문에 코틀린에서는 3항연산자를 지원하지 않습니다. if를 이용해서 3항연상자를 대신할 수 있기때문입니다. 아래의 3가지처럼 모두 사용할 수 있습니다. var max = a if (a b) { max = a } else { .. 2021. 6. 3.
[kotlin] 코틀린 차곡차곡- 1. 코틀린의 변수와 타입 안녕하세요. 오늘은 여러분들과 함께 코틀린(kotlin)에서 변수를 선언하고 사용하는 방법에 대해서 알아보는 시간을 가져보고자 합니다. 코틀린의 필드와 변수 코틀린에서 기본적으로 필드와 변수를 선언하는 방법은 아래와 같습니다. 키워드(keyword) - 키워드는 변수 선언시 해당 변수가 변경가능 한지 여부를 결정하는 키워드입니다. 해당 값은 필수 값입니다.별도로 부르는 다른 말은 없는것으로 확인됩니다. kotlinlang_basic-syntax val - 변경 불가능한(immutagble)한 변수로 지정하는 키워드입니다. 한번 할당하면 변경하지 못하는 특성을 가집니다. var - 변경 가능한(mutable)한 변수로 지정하는 키워드입니다. 할당 된 값을 가능한 영역안에서 언제라도 변경할 수 있는 특성을 .. 2021. 5. 31.
[database] mysql과 mariaDB 중 어떤 DB가 나에게 맞을까? 안녕하세요. 오늘은 mysql과 mariaDB에 대한 차이점을 알아보고 어떤것을 사용하면 개인에게 그리고 팀에게 적합할지 알아보는 시간을 가져보도록 하겠습니다. 히스토리 mariaDB는 mysql의 개발자가 나와서 만들었다는 사실은 다들 익히 알고 계실껍니다. 저도 여기까지는 어디선가 들어가 이미 알고 있던 정보입니다. 그렇습니다. mariaDB의 개발자인 Monty는 회사를 나와 MontyProgram AB라는 회사를 차리면서 mariaDB를 만들게 된것입니다. mysql을 기반으로 fork하여 자체적으로 개발하는 서비스로 mariaDB 뿐만이 아니라 PerconaServer도 있다고 합니다. 이들간의 관계를 한번 보도록 하겠습니다. 그렇습니다. mariaDB는 mysql의 엔진에 PerconaServ.. 2021. 5. 26.
[java] ThreadLocal에 관하여 안녕하세요. 오늘은 ThreadLocal에 대해서 알아보도록 하겠습니다. 변수를 공유하는 방법 객체는 Heap 또는 Stack 메모리 영역에 배치시킬 수 있습니다. Heap 영역은 일반적으로 모든 thread에서 접근 할 수 있으며 stack은 thread 하나당 만들어 지는 메모리 영역으로 thread간 접근이 불가능한 것으로 알려져 있습니다. 아래 코드의 UserRepository 변수는 Heap 영역에 만들어진 객체를 가리키고 있으며 다른 곳에서도 해당 객체를 바로 접근할 수 있습니다. 함께 공유해서 사용하기 때문에 여러 thread에서 사용할 때 공유된 정보로써 제공할 수 있습니다. 따라서 만약 UserRepository가 설정 정보를 가지고 있고 이를 변경한다면 사용하고 있는 모든 곳에서 영향을.. 2021. 5. 15.
[LeetCode] Top K Frequent Elements 개인풀이 문제 숫자 배열 nums과 숫자 k가 주어집니다. nums 배열에서 자주 반복되는 값을 k개 반환하도록 합니다. 순서는 상관 없습니다. 예제_1 입력: nums = [1,1,1,2,2,3], k = 2 출력: [1,2] 예제_2 입력: nums = [1], k = 1 출력: [1] 제약조건 1 count.get(n1) - count.get(n2)); // 2. keep k top frequent elements in the heap // O(N log k) k) heap.poll(); } // 3. build an output array // O(k log k) .. 2021. 5. 1.
[spring + spock + TestContainer] Spring, Spock Framework에서 기능 테스트 하기 - TestContainer 사용 안녕하세요. Spring에서 DB 기능 테스트를 할 때 어떤 걸 주로 이용하시나요? 제가 생각하기로는 여러분들은 로컬에서 쉽게 돌릴 수 있는 인메모리 DB인 H2를 가장 많이 사용하실 것 같습니다. 왜냐하면 사용하기 쉽기 때문이겠죠. 오늘제가 여러분들께 알려드리고자 하는 것은 조금 다른 기능 테스트 방법을 제공해주는 TestContainers입니다. H2를 사용하는 것과 어떻게 다르며 사용할 수 있는지 알아보도록 하겠습니다. :) TestContainer TestContainer는 로컬 환경에서 실제 DB에 테스트를 할 수 있도록 지원하는 Java 라이브러리입니다. DB라면 인메모리 DB인 H2를 사용하면 되지 않느냐? 라고 생각하실 수 있습니다. 그럼에도 불구하고 TestContainer를 왜 사용할까.. 2021. 4. 30.
[LeetCode] Single Number 개인풀이 문제 integer 배열이 주어집니다. 1개의 숫자를 제외하고는 2번씩 노출됩니다. 1번만 노출되는 숫자를 찾으세요. 나아가기 : O(N) 시간복잡도와 O(1)의 공간복잡도를 가질 수 있도록 해결할 수 있으면 좋습니다. 예제 1 입력 : [2,2,1] 출력 : 1 예제 2 입력 : [4,1,2,1,2] 출력 : 4 예제 3 입력 : [1] 출력 : 1 제약 조건 1 2021. 4. 28.