(์ดํŽ™ํ‹ฐ๋ธŒ ์ฝ”ํ‹€๋ฆฐ) ๋ถˆ๊ณต๋ณ€์„ฑ(invariance), ๊ณต๋ณ€์„ฑ(covariance), ๋ฐ˜๊ณต๋ณ€์„ฑ(contvariance)

- ๋ถˆ๊ณต๋ณ€์„ฑ์€ ์–ด๋–ค ํƒ€์ž…๋„ ๋ชจ๋‘ ํ—ˆ์šฉํ•œ๋‹ค.

- ๊ณต๋ณ€์„ฑ์€ ์ž์‹ ๊ณผ ๋ถ€๋ชจํƒ€์ž…๋งŒ ํ—ˆ์šฉํ•œ๋‹ค. produce, ์ƒ์‚ฐ์˜ ๊ฐœ๋…, read-only

- ๋ฐ˜๊ณต๋ณ€์„ฑ์€ ์ž์‹ ๊ณผ ์„œ๋ธŒํƒ€์ž…๋งŒ ํ—ˆ์šฉํ•œ๋‹ค. consume, ์†Œ๋น„์˜ ๊ฐœ๋…, write-only

 

type-safe ํ•œ ์ฝ”ํ‹€๋ฆฐ์˜ ๊ฒฝ์šฐ ์ œ๋„ค๋ฆญ ์‚ฌ์šฉ ์‹œ ์œ„ ๊ฐœ๋…์„ ์ ์šฉํ•˜๋ฉด ์ข€ ๋” ์œ ์—ฐํ•˜๊ณ  ์•ˆ์ •์ ์ธ ์ฝ”๋“œ ์ž‘์„ฑ์ด ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. ๋””ํ…Œ์ผํ•œ ์˜ˆ์‹œ๋Š” ๊นƒํ—™์— ์ •๋ฆฌํ•ด๋‘์—ˆ๋‹ค.

 

 

(์ดํŽ™ํ‹ฐ๋ธŒ ์ฝ”ํ‹€๋ฆฐ) equals ์—๋Š” ๋‘๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ๊ตฌ์กฐ์  ๋™๋“ฑ์„ฑ๊ณผ ๋ ˆํผ๋Ÿฐ์Šค์  ๋™๋“ฑ์„ฑ

- ๊ตฌ์กฐ์  ๋™๋“ฑ์„ฑ์€ ํด๋ž˜์Šค ๋‚ด ๋ฉค๋ฒ„ํ•„๋“œ๊ฐ€ ๋™์ผํ•˜๊ฒŒ ์ž‘์„ฑ๋˜์—ˆ๋Š”๊ฐ€๋ฅผ ํŒ๋‹จํ•œ๋‹ค. ์ฝ”ํ‹€๋ฆฐ์—์„œ '==' ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

- ๋ ˆํผ๋Ÿฐ์Šค์  ๋™๋“ฑ์„ฑ์€ ๋น„๊ต ๋Œ€์ƒ์ด ๋˜๋Š” ๋‘ ๊ฐœ์˜ ํด๋ž˜์Šค๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ์ฒด๊ฐ€ ๋™์ผํ•œ์ง€ ํŒ๋‹จํ•œ๋‹ค. '===' ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

data class Player(
    val name: String,
    val age: Int,
    val gender: Gender
) {
    enum class Gender {
        M, W
    }
}

fun main() {
    val player1 = Player("park", 10, Player.Gender.M)
    val player2 = Player("park", 10, Player.Gender.M)
    val player1Reference = player1

    // ๊ตฌ์กฐ์  ๋™๋“ฑ์„ฑ : ==
    println("๊ตฌ์กฐ์  ๋™๋“ฑ์„ฑ")
    println(player1 == player2) // true
    println(player1 == player1Reference) // true

    // ๋ ˆํผ๋Ÿฐ์Šค์  ๋™๋“ฑ์„ฑ : ===
    println("๋ ˆํผ๋Ÿฐ์Šค์  ๋™๋“ฑ์„ฑ")
    println(player1 === player2) // false
    println(player1 === player1Reference) // true

    val player3 = player1.copy(name = "kim")
    println("ํ…Œ์ŠคํŠธ")
    println(player1 == player3) // false
    println(player1 === player3) // false
}

 

 

base64/base32

๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ํ…์ŠคํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ธ์ฝ”๋”ฉ ๊ธฐ๋ฒ•์ด๋‹ค. ์ด ๋•Œ ์ธ์ฝ”๋”ฉ์— ์ด์šฉ๋˜๋Š” ๋ฌธ์ž์—ด์€ ์ •ํ•ด์ง„ US-ASCII 64๊ฐœ์˜ ๋ฌธ์ž์—ด์„ ๊ฐ€์ง€๊ณ  ์ธ์ฝ”๋”ฉ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. source ์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ 6๋น„ํŠธ์”ฉ ์ž˜๋ผ์„œ 64๊ฐœ์˜ ๋ฌธ์ž์—ด์— ๋งคํ•‘์‹œ์ผœ์„œ ์ธ์ฝ”๋”ฉ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ๊ฐ€ ํฐ ๊ฒฝ์šฐ์— ์œ„ํ‚คํ”ผ์…œ, 33~37% ์ •๋„์˜ ๋ฐ์ดํ„ฐ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

 

๋ฐ์ดํ„ฐ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒ๋˜๋Š” ์ด์œ ๋Š” ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•œ๋‹ค.

  • base64 ์ธ์ฝ”๋”ฉ์€ 6๋น„ํŠธ์”ฉ ์ž˜๋ผ์„œ ์ฒ˜๋ฆฌ๊ฐ€ ๋œ๋‹ค. ํ•˜์ง€๋งŒ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ๋Š” 8๋น„ํŠธ์”ฉ ์ž˜๋ผ์„œ ์ฒ˜๋ฆฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— base64 ์ธ์ฝ”๋”ฉ ์‹œ์—๋Š” ๊ธฐ์กด ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ ๋Œ€๋น„ ๋” ๋งŽ์€ ๋ฌธ์ž๊ฐ€ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • base64 ์ธ์ฝ”๋”ฉ ๋ฐ์ดํ„ฐ๋Š” ๊ฐ ๋ผ์ธ ๋์— ์ค„๋ฐ”๊ฟˆ ๋ฌธ์ž๊ฐ€ ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ๋‹ค. 6bit ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ๋๋‚ด๊ธฐ ์œ„ํ•ด์„œ '=' ๋ฌธ์ž๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค.

 

base32 ์ธ์ฝ”๋”ฉ์€ ๋ฌด์—‡์ธ๊ฐ€? 5๋น„ํŠธ์”ฉ ์ž˜๋ผ์„œ 32๊ฐœ์˜ ๋ฌธ์ž์—ด์— ๋งคํ•‘๋œ ์ธ์ฝ”๋”ฉ์„ ์˜๋ฏธํ•œ๋‹ค.  base64 ์ธ์ฝ”๋”ฉ ๊ด€๋ จ๋œ ์ถ”๊ฐ€์ ์ธ ๋‚ด์šฉ์„ ๊นƒํ—™์— ์ •๋ฆฌํ•ด๋‘์—ˆ๋‹ค.

 

Posted by doubler
,