Programming Language
[Kotlin Tips] Deduplicating Collection Items
https://www.youtube.com/watch?v=ECOf0PeSANw 코틀린의 콜렉션 (리스트, Set,,) 에서 중복을 제거하는 방법에 대해서 꿀팁을 알려준다고 한다! val fruitBasket = listOf( "Apple", "Banana", "Cherry", "Apple", "Apple", "APPLE", "BANANA", "Durian" ) 자 요런 리스트가 있다고 생각해보자~! 이때 여기서 중복된 과일이 보인다! Apple이 왜이렇게 많은 거야,,?! 여기서 중복된 과일을 지워보자! 이때 어떤 방법이 생각나나요? 일단 두가지 방법이 머릿속에 삭 스칠 것이다. 방법 1. distinct() 함수를 사용한다. fun main() { val unique = fruitBasket.disti..
[Kotlin Tips] Kotlin에서 Shadowing을 다루는 방법
Fully Qualified Names to the Rescue! | Kotlin Tips 5월 20일에 올라온 따끈따끈한(?) 영상이다! 만약에 이런 코드가 있다고 생각해보자. package io.sebi.demo fun openFile() { println("Opening file (top level)...") } class Repo { fun openFile() { println("Opening file (repository)...") } fun readFile() { openFile() } } 이때 readFile()을 호출한다면 출력 값은 어떤게 나올까? 다들 당연히 알겠지만 Opening file (repository)...이다. 근데 Kotlin에서는 shadowing일 경우에 탑 레벨에 있..
[공식문서를 읽자] Classes and objects - Properties
Properties | Kotlin kotlinlang.org Declaring properties 코틀린 클래스에서 속성은 var 키워드를 사용하여 변경 가능으로 선언하거나 val 키워드를 사용하여 읽기 전용으로 선언할 수 있다. class Address { var name: String = "Holmes, Sherlock" var street: String = "Baker" var city: String = "London" var state: String? = null var zip: String = "123456" } 속성을 사용하려면 해당 이름으로 속성을 참조하면 된다. fun copyAddress(address: Address): Address { val result = Address() // ..
[공식문서를 읽자] Classes and objects - Inheritance
Inheritance | Kotlin kotlinlang.org Inheritance Kotlin의 모든 클래스에는 supertype(부모타입)이 선언되지 않은 클래스의 기본 superclass(부모클래스) Any라는 공통 슈퍼클래스가 있다. (자바의 Object 클래스와 비슷함). Any 클래스는 3가지 메소드를 가지고 있다. equals(), hashCode(), toString(). 모든 Kotlin 클래스가 해당 메서드를 가지고 있다. 기본적으로, 코틀린 클래스는 불변(final)이며, 상속할 수 없다. 클래스를 상속 가능하게 만드려면 open 키워드를 클래스에 붙여 표시한다. class Example // Implicitly inherits from Any open class Base // Cl..
[공식문서를 읽자] Classes and objects - Classes
Classes | Kotlin kotlinlang.org 코틀린에서 클래스는 class 키워드로 선언된다. class Person { /*...*/ } 클래스 선언은 클래스 이름, 클래스 헤더(유형 매개변수, 기본 생성자 및 기타 사항 지정) 및 중괄호로 묶인 클래스 본문으로 구성된다. 헤더와 본문은 모두 선택사항이다. 클래스에 본문이 없으면 중괄호를 생략할 수 있다. class Empty Constructors 코틀린에서 클래스는 기본 생성자와 하나 이상의 보조 생성자를 가질 수 있다. 기본 생성자는 클래스 헤더의 일부로 선언되며, 클래스 이름 뒤에 타입 매개변수와 함께 작성한다. class Person constructor(firstName: String) { /*...*/ } 기본 생성자에 anno..
[공식문서를 읽자] Packages and imports
Packages and imports | Kotlin kotlinlang.org 코틀린에서 소스파일은 패키지 선언으로 시작할 수 있다. package org.example fun printMessage() { /*...*/ } class Message { /*...*/ } // ... 이 패키지에는 소스 파일의 클래스, 함수 등 모든 내용이 포함되어 있다. 따라서 위의 예에서 printMessage()의 전체 이름은 org.example.printMessage이고 메시지의 전체 이름은 org.example.Message이다. 패키지가 지정되지 않은 경우 이러한 파일의 내용은 이름이 없는 default 패키지에 속한다. Default imports 기본적으로 모든 Kotlin 파일에 여러 패키지를 가져온다..
[공식문서를 읽자] Control flow - Returns and jumps
Returns and jumps | Kotlin kotlinlang.org 코틀린은 제어를 넘기는 세가지 구조적인 return과 jump 표현식이 있다. 이는 더 큰 표현식의 일부로 사용이 가능하다. Type은 Nothing 타입이다. return : return은 가장 가까운 블록의 함수 또는 익명 함수를 종료하고 반환된다. break : 가장 가까운 반복 루프를 중단시킨다. continue : 가장 가까운 반복 루프를 다음 반복으로 진행시킨다. val s = person.name ?: return Break and continue lables 코틀린의 모든 표현식은 레이블로 표현될 수 있다. break와 continue를 레이블과 함께 사용할 수 있다. 레이블과 함께 사용하는 경우 해당 레이블이 붙은..
[공식문서를 읽자] Control flow - Conditions and loops
Conditions and loops | Kotlin kotlinlang.org If expression 코틀린에서 if문은 표현식(값을 반환한다.)이다. 따라서, 일반 if가 역할을 잘 수행하기 때문에 삼항 연산자 (조건 ? then : else)가 없다. var max = a if (a b) { max = a } else { max = b } // As expression val max = if (a > b) a else b if 표현식의 분기는 블록이 될 수 있다. 이 경우에 블록의 값은 마지막 표현식이다. if 문을 값을 반환하는 식이나 변수에 값을 대입하기 위한 표현식으로 사용하는 경우, else 분기가 필수다...
[공식문서를 읽자] Types - Type checks and casts
Type checks and casts | Kotlin kotlinlang.org is and !is operators 객체가 주어진 Type을 준수하는지 여부를 식별하는 런타임에 타입 체크를 수행하려면 is 연산자 또는 부정 형식인 !is 를 사용하라. if (obj is String) { print(obj.length) } if (obj !is String) { // == !(obj is String) print("Not a String") } else { print(obj.length) } Smart casts 대부분의 경우, 코틀린 컴파일러는 변경 불가능한 값에 대해 is-check 및 명시적 캐스트를 추적하고 필요할 때 자동으로 (안전한) 형변환을 삽입하기 때문에 명시적 캐스트 연산자를 사용할 ..
[공식문서를 읽자] Types - Basic types
Basic types | Kotlin kotlinlang.org 코틀린에서 모든 것은 우리가 어떤 변수에 대해 멤버 함수와 Properties를 호출 할 수 있다는 점에서 객체이다. 일부 유형은 특수한 내부 표현을 가질 수 있다. 예를 들어 숫자, 문자, Boolean은 런타임 시에 primitive value로 표현될 수 있지만, 사용자가 보기엔 ordinary class(일반 클래스)로 보인다. Numbers Integer types 코틀린에서는 숫자를 표현하기 위해 여러개의 내장 타입을 제공한다. Type Size(bits) Min value Max value Byte 8 -128 127 Short 16 -32768 32767 Int 32 \(-2^{31}\) \(2^{31}-1\) Long 64 ..
[Java] 연산자
연산자 : 연산을 수행하는 기호 (+, -, *, / 등) 피연산자 : 연산자의 작업 대상 (변수, 상수, 리터럴, 수식) 피연산자의 개수에 의한 분류 피연산자의 개수가 하나면 '단항 연산자', 두 개면 '이항 연산자', 세 개면 '삼항 연산자'라고 부름 이름 분류 종류 설명 기타 대입 연산자 단항, 대입 = 값을 대입할 때 사용 증감 연산자 단항, 증가 ++, -- 피연산자에 저장된 값을 1 증가 또는감소 전위에 붙으면 값이 참조되기 전 증감 후위에 붙으면 값이 참조된 후 증감 부호 연산자 단항, 부호 +, - 피연산자의 부호를 반대로 변경한 결과 반환 산술 연산자 이항, 대입 +, -, *, /, % 사칙 연산과 나머지 연산 나눗셈, 나머지 연산 : 0으로 나눌 시 런타임 에러 발생 비교 연산자 이항..
[공식문서를 읽자] Basic Syntax
Basic syntax | Kotlin kotlinlang.org Package definition and imports 패키지 명세와 import 문은 소스 파일의 최상단에 위치한다. 디렉토리와 패키지를 일치시킬 필요는 없다 : 소스 파일은 독단적으로(임의로?) 시스템에 배치할 수 있다. package my.demo import kotlin.text.* // ... Program entry point 코틀린 애플리케이션의 진입점은 main 함수이다. // 문자열 인자가 없는 main 함수 fun main() { println("Hello world!") } // 문자열 인자가 있는 main 함수 fun main(args: Array) { println(args.contentToString()) } Pr..
[Java] 변수
1. 변수 1. 변수란 ? 단 하나의 값을 저장할 수 있는 메모리 공간 2. 변수의 선언과 초기화 int age; // 변수의 선언 age = 25; // 변수의 초기화 변수 타입 : 변수에 저장될 값이 어떤 타입인지를 지정해주는 것 (정수형, 실수형, 문자형 등등..) 변수 이름 : 메모리 공간에 이름을 붙여준 것 → 변수를 선언하면, 메모리의 빈 공간에 ' 변수 타입에 알맞은 크기의 저장공간이 확보되고, 앞으로 이 저장공간은 '변수 이름'을 통해 사용 가능 🐯 왜 변수를 선언한 이후 반드시 변수를 초기화 해주어야될까? 메모리는 여러 프로그램이 공유하는 자원이다. 전에 다른 프로그램에 의해 저장된 garbage value가 남아있을 수 있기 때문에 반드시 초기화 해주어야 한다!! 3. 변수의 명명규칙 ..
[Java] 자바 그리고 JVM
자바 언어의 특징 1. 운영체제에 독립적이다. 자바로 작성된 프로그램은 운영체제에 독립적이지만 JVM은 운영체제에 종속적이다. 자바 프로그램은 JVM하고만 통신하고 JVM이 자바 응용 프로그램으로부터 전달받은 명령을 해당 운영체제가 이해할 수 있도록 변환하여 전달함 2. 객체지향 언어이다. 상속, 캡슐화, 다형성이 잘 적용된 순수한 객체 지향 언어이다. 3. 자동 메모리 관리 (Garbage Collection) 가비지 컬렉터가 자동적으로 메모리를 관리해주기 때문에 프로그래머는 메모리를 따로 관리하지 않아도 된다. 4. 네트워크와 분산처리를 지원한다. 5. 멀티 쓰레드를 지원한다. 여러 쓰레드에 대한 스케줄링을 자바 인터프리터가 담당함 6. 동적 로딩을 지원한다. 실행 시에 모든 클래스가 로딩되지 않고 ..