import kotlin.math.PI

//Functions 함수

//함수 선언할때는 fun keyword를 사용한다.
fun hello() {
    return println("Hello, world!")
}

//x, y는 함수의 파라미터이고 Int타입. return타입 또한 Int타입.
/*fun sum(x: Int, y: Int): Int {
    return x + y
}*/
//위의 함수를 Single-expression function으로 바꾸면
fun sum(x: Int, y: Int) = x + y
//이렇게 할 수 있음. 대괄호를 없애고 할당연산자 = 를 통해 함수몸체를 선언한다. 코틀린의 type inference덕분에 return type또한 제거할 수 있다.

//Named arguments, Default parameter values
//파라미터에 이름을 붙이면 코드의 가독성이 좋아짐
fun printMessageWithPrefix(message: String, prefix: String = "Info") {
    println("[$prefix] $message")
}

//Return이 없는 함수
fun printMessage(message: String) {
    println(message)
    // `return Unit` or `reutnr` is optional
    //함수에서 return value가 없으면 그 함수의 return type은 Unit이다. Unit은 오직 하나의 value를 갖는 type이다.
    //함수 몸체 안에 명시적으로 선언할 필요가 없다.
}

fun main() {
    hello()
    println(sum(1, 2))
    printMessageWithPrefix("Hello, world!", "Greeting")
    //named arguments를 통해 직접 할당하게 되면 파라미터의 순서를 바꿀 수 있다.
    printMessageWithPrefix(prefix = "Log", message = "Hello")
    //prefix는 default value를 주어서 파라미터를 안넘기면 기본값이 출력된다.
    printMessageWithPrefix("This is a custom message.")
    //[Info] This is a custom message.

    //return이 없는 함수
    printMessage("This function doesn't have return type.")
}


fun circleArea(radius: Int)  =  radius * radius * PI

https://kotlinlang.org/docs/kotlin-tour-functions.html#lambda-expressions

 

Functions | Kotlin

 

kotlinlang.org

 

'정보 > Language' 카테고리의 다른 글

[Javascript] Object, Array  (0) 2024.01.09
Kotlin: Control Flow  (0) 2023.07.31
Kotlin : Hello, world!  (0) 2023.07.20
Enum을 사용한 메뉴관리  (0) 2022.08.26
java.util.HashMap  (0) 2022.07.29
//Control flow
//conditional expreesions
//kotlin은 if 와 when을 조건표현으로 제공한다.
fun main() {
    //if를 사용하면 소괄호()안에 조건을 주고 tru일 경우 {}안에 코드를 실행한다.
    val d: Int
    val check = true

    if (check) {
        d = 1
    } else {
        d = 2
    }

    println(d)

    //코틀린에는 3항 연산자는 없다.
    //대신 if를 {}없이 사용할 수 있다.

    val a = 1
    val b = 2
    println(if (a > b) a else b)

    //when은 조건절인데 여러 개의 조건을 비교할 수 있다. 약간 swich같은 느낌
    val obj = "Hello"

    when (obj) {
        "1" -> println("One")
        "Hello" -> println("Greeting")
        //"Hello" -> println("Greeting2") // 이건 실행 안됨
        else -> println("Unknown")
    }
    //만족하는 분기문을 순차적으로 실행하므로 만족한 1개만 실행된다는 것에 유의.

    //when을 이용했을 때 변수에 바로 할당된다.
    val result = when (obj) {
        "1" -> "One"
        "Hello" -> "Greeting"
        else -> "Unknown"
    }
    println(result)

    //Boolean절을 여러 개 체크 하는 경우에도 유용하다.
    val temp = 18

    val description = when {
        temp < 0 -> "very cold"
        temp < 10 -> "a bit cold"
        temp < 20 -> "warm"
        else -> "hot"
    }
    println(description)

    //Ranges
    //가장 일반적으로 범위를 만드는 경우에 ..operator를 사용한다.
    //1..4 는 1,2,3,4와 같다.
    //마지막을 포함하지 않게 선언하고 싶으면 ..<를 사용한다.
    //1..<4 는 1,2,3과 같다.
    //역순으로 선언할 때는 downTo를 사용한다.
    //4 downTo 1은 4,3,2,1과 같다.
    //1이 아닌 증가량의 범위를 선언하고 싶으면 step을 사용한다.
    //1..5 step 2는 1,3,5와 같음
    //Char에서도 사용 가능하다.
    //'a'..'d'는 'a','b','c','d'와 같다.
    //'z' downTo 's' step 2는 'z', 'x', 'v', 't'이다.

    //Loops
    //가장 흔한 loop structures로 for과 while이 있음.
    //for은 반복하면서 action을 수행하는 것이고,
    //while은 특정한 조건이 만족될때까지 action을 수행함.

    //for
    //for loop를 통해 정해진 범위를 반복할 수 있음.
    for (number in 1..5) {
        print(number)
    }
    println()

    //Collection에서도 loop를 통해 반복될 수 있다.
    val cakes = listOf("carrot", "cheese", "chocolate")

    for (cake in cakes) {
        println("Yummy, it's a $cake cake!")
    }

    //while은 두 방법으로 사용될 수 있다.
    //1. 조건절이 참일 경우 실행: while
    //2. 코드블록을 먼저 실행하고 그 다음에 조건절을 체크한다.: do-while
    var cakesEaten = 0
    var cakesBaked = 0
    while (cakesEaten < 3) {
        println("Eat a cake")
        cakesEaten++
    }
    do {
        println("Bakes a cake")
        cakesBaked++
    } while (cakesBaked < cakesEaten)

}

https://kotlinlang.org/docs/kotlin-tour-control-flow.html

 

Control flow | Kotlin

 

kotlinlang.org

 

Exercise 3 Fizz buzz game

fun main() {
    for(number in 1..100){
        val result = when {
            number % 3 == 0 && number % 5 == 0 -> "fizzbuzz"
            number % 3 == 0 -> "fizz"
            number % 5 == 0 -> "buzz"
            else -> number
        }
        println(result)
    }
}

'정보 > Language' 카테고리의 다른 글

[Javascript] Object, Array  (0) 2024.01.09
Kotlin: Functions  (0) 2023.08.02
Kotlin : Hello, world!  (0) 2023.07.20
Enum을 사용한 메뉴관리  (0) 2022.08.26
java.util.HashMap  (0) 2022.07.29

https://kotlinlang.org/docs/kotlin-tour-hello-world.html

 

Hello world | Kotlin

 

kotlinlang.org

Top level 선언

main 함수 밖 선언 및 할당.

문자열 template

Kotlin 변수 : var, val 

//변수는 main함수 바깥에서 선언될 수 있는데, 이런 경우에는 top level에 선언되었다고 한다.
val value = 10
//value = 20 //val로 선언했기 때문에 이 후에 재할당이 불가하다.
var variable = 20
//var variable2 //선언만 하면 안되고 초기화까지해야한다.

//fun 으로 function을 선언한다.
fun main() {
    println("Hello, world!")
    println(value)

    variable = 30
    println(variable)

    val customers = 10
    //String templates
    //그냥 해당 값만 출력할거면 $변수명 으로
    println("There are $customers customers")
    //값을 수정한다면 ${}를 사용한다.
    println("There are ${customers + 1} customers")
}

//read-only variables with val 변하지않는 값
//mutable variables with var 할당 후 변할 수 있는 값을 담는 곳
//공식문서에서는 모든 변수를 val로 선언하고 할당 후 변할 수 있는 값은 var로 선언할 것을 추천함.

 

'정보 > Language' 카테고리의 다른 글

Kotlin: Functions  (0) 2023.08.02
Kotlin: Control Flow  (0) 2023.07.31
Enum을 사용한 메뉴관리  (0) 2022.08.26
java.util.HashMap  (0) 2022.07.29
JavaScript가 뭔가요 ?  (0) 2022.01.17
import { useState, useRef } from 'react';

function Ref() {
    const { text, setText } = useState('');
    const textRef = useRef();
    // == 는 String Type을 비교한다.
    // === 는 object type을 비교한다. ===를 쓸 것!
    const handleChange = (e, option) => {
        if (option === 1) {
            textRef.current.value = e.target.value;
            setText(e.target.value);
        } else if (option === 2) {
            setText(textRef.current.value);
        }
    }

    return (
        <div>
            <input type="text" value={text} onChange={(e) => handleChange(e, 1)} />
            <br />
            <textarea
                rows={5}
                cols={30}
                ref={textRef}
                onChange={(e) => handleChange(e, 2)}
            ></textarea>

            <button>Ref Info</button>
        </div>
    )
}

onChange에 화살표 함수를 꼭 써야하는 경우에는 이렇게 매개변수를 통해 또 다른 조작을 해야할 경우이다. 

만약 (e) => handleChange(e, 2)가 없으면 해당 이벤트가 정상 동작하지 않음.

 

useRef 를 import하면 직접적으로 돔요소를 건들여야할 때 쓰이는 ref를 통해 이름을 달 수 있다.

 

https://vmpo.tistory.com/66

 

MSSQL 프로시저 테이블 검색하기 (특정 테이블 내용이 포함된 프로시저 찾기)

MSSQL에서 내가 원하는 내용이 포함된 프로시저를 찾는 쿼리 입니다. %와 %사이에 원하는 내용을 입력하시면 됩니다. 예를 들어 특정 테이블 명이 포함된 프로시저를 찾을때 유용합니다. SELECT OBJEC

vmpo.tistory.com

위의 게시글을 참고함.

SELECT OBJECT_NAME(OBJECT_ID),
		OBJECT_DEFINITION(OBJECT_ID)
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%테이블이름%'

%% 사이에 원하는 테이블이름을 넣으면, 해당 테이블이름을 포함하고 있는 SP를 반환해준다.

 

public class HashMap<K,V>
extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable

https://docs.oracle.com/javase/8/docs/api/

 

Java Platform SE 8

 

docs.oracle.com

Object를 상속받고 Map<K, V>인터페이스를 구현한 추상클래스 AbstractMap.

 

HashMap은 Map<K, V>, Cloneable, Serializable 인터페이스를 구현하고 AbstractMap<K, V>를 상속받은 클래스이다.

 

더보기

인터페이스와 추상클래스 >>

Hash table이라는 자료구조를 가지고 있다. 

java.util.Hashtable는 동기화를 지원하고, 키, 값에 null을 넣을 수 없지만, java.util.HashMap은 동기화를 지원하지 않고 키, 값에 null을 넣을 수 있다. 

순서가 없다.

기본 연산인 get, put은 해쉬함수를 통해 elements들을 buckets에 넣고 가져오고, 이러한 연산에는 일정한 성능을 보인다. 

HashMap안에 있는 요소들을 보기위한 iteration 성능이 중요하다면 처음 capacity를 (the number of buckets) 너무 크거나 적게 주지 않는 것이 중요하다. -> HashMap 인스턴스의 capacity와 key-value 매핑된 수의 크기의 비례하는 시간을 필요로 하므로.

HashMap은 2개 파라미터를 인스턴스로 갖는데, initial capacity와 load factor은 성능에 영향을 미친다. capacity는 hash table이라는 자료 구조에서 쓰이는 buckets의 수를 말하고, 해당 파라미터의 initial capacity는 hash table이 생성될 시의 capacity를 말함.또 다른 파라미터 load factor은 capacity가 자동으로 증가되기 전에 hash table이 얼마나 차있는지 측정한다.  load factor와 현재 capacity의 곱의 수가 hash table을 초과하면, rehash되고(내부 데이터구조가 다시 재정립되는 것), hash table은 대략 2배의 buckets을 갖게된다.

 

일반적으로 기본 load factor(.75)은 시간과 공간비용 측면에서 적절한 밸런스를 제공한다. 더 큰 값은 공간 오버해드는 줄여주지만 찾는 비용이 늘어난다. (get, put을 포함한 대부분의 operation에 영향을 끼침.) 

따라서 2개의 인스턴스인 initial capacity와 load factor의 값 설정시 rehash operation을 최소화 하기 위해 고려해야한다. load factor로 개체의 최대 개수(데이터 입력할 최대개수)를 나눴을 때 initial capacity가 더 크면 rehash는 일어나지 않는다.-> HashMap의 인스턴스에 많이 저장되야 되면 처음 생성할 때 부터 init capacity를 크게 주면 rehash하지 않아도 되니까 더 효율적일 수 있다.

많은 키를 사용할 때 같은 hashCode()를 사용하는 것은 성능에 좋지 않다. 영향을 개선시키기 위해 키가 Comparable클래스 일 때 comparison order를 사용하면 키들 간의 연결을 끊을 수 있다. // 이 부분은 무슨 말을 하고 싶은지 몰겠음.

 

동기화를 지원하지 않는 클래스이다. Collenctions.synchronizedMap을 통해 감싸(wrapped)져서 동기화(멀티쓰레드 환경)에 안전하게 사용할 수 있음. 

Map m = Collections.synchronizedMap(new HashMap(...));

만약 다른 쓰레드에서 바꾸면 ConcurrentModificationException을 날림. 

 

 

 

https://gabii.tistory.com/entry/Git-Git-Bash-%ED%95%9C%EA%B8%80-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0

 

[Git] Git Bash 한글 설정하기

이번 포스팅은 Windows에서 Git을 사용하기 위한 Git Bash의 한글 설정을 해보겠습니다. 혹시 Git Bash 설치하는 법이 궁금하신 분들은 아래 포스팅을 먼저 참고해주시면 됩니다. 2018/09/27 - [Program/Install]

gabii.tistory.com

위 게시글 참고 해서 고침

 

Java도 인코딩 다 UTF-8로 설정했는데, 자꾸 git bash 에서 깨져서 나와서 왜그러지 싶었는데,

Local Character set을 eucKR 로 해야지 한글이 나온다.

 

cmd 창에서도 자꾸 한글이 깨져서 자바 프로그램이 실행되서,

(인코딩도 모두 UTF-8로 했는데)

 

레거시 콘솔 사용 에 체크를 주고 실행했더니

한글이 잘 나온다. why..??

https://answers.microsoft.com/ko-kr/windows/forum/all/cmd-%ED%95%9C%EA%B8%80%EA%B9%A8%EC%A7%90/f757fe37-7c1f-456f-9692-3f2133f420bf

이것은 위 게시글 참고했음.

 

 

+ Recent posts