[TIL] 2023.11.27

Gahyeon LeeΒ·2023λ…„ 11μ›” 27일
0

TIL

λͺ©λ‘ 보기
11/47
post-thumbnail

πŸ’» <Mac κΈ°μ€€> Android Studio μœ μš©ν•œ 단좕킀

  • 라인 μ§€μš°κΈ°
    Command + delete
  • 주석 처리
    (주석 : ν”„λ‘œκ·Έλž¨μ˜ λ™μž‘μ— 영ν–₯을 μ£Όμ§€ μ•Šκ³  μ„€λͺ…을 μΆ”κ°€ν•  수 μžˆλŠ” 문법)
    Command + /
  • μžλ™ 포컀싱
    ESC
  • 전체 μ°ΎκΈ°
    Command + Shift + F
  • λ¬Έμ„œ μ €μž₯
    Command + S
  • 라인 λ“œλž˜κ·Έ
    Shift + λ°©ν–₯ν‚€<상,ν•˜,쒌,우>
  • λ¬Έμž₯ μ΅œμƒλ‹¨, μ΅œν•˜λ‹¨μœΌλ‘œ 이동
    Command + <상, ν•˜>

πŸ’» μ½”λ”© μ»¨λ²€μ…˜(Coding Convention)

  • μ •μ˜ : μ½”λ”© μ»¨λ²€μ…˜μ΄λž€ λ‹€λ₯Έ μ‚¬λžŒλ“€λ„ μ΄ν•΄ν•˜κΈ° μ‰½κ²Œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” κ·œμΉ™μœΌλ‘œ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ§ˆλ‹€ μƒμ΄ν•˜λ‹€.
  • ν•„μš”μ„± : μ½”λ“œμ˜ 가독성이 μ¦κ°€ν•΄μ„œ λ‚˜μ€‘μ— 봐도 μ‰½κ²Œ 이해할 수 있고, μœ μ§€ λ³΄μˆ˜κ°€ μš©μ΄ν•˜λ©° 효율적인 ν˜‘μ—…μ΄ κ°€λŠ₯ν•˜λ‹€.
  • 자주 μƒμš©ν•˜λŠ” ν‘œκΈ°λ²•
    • camelCase ν‘œκΈ°λ²• : 주둜 λ³€μˆ˜, λ©”μ†Œλ“œμ˜ 이름을 μ§€μ •ν•  λ•Œ μ‚¬μš©

       seoulFood ⭕️
       seoul_food ❌
       seoulfood ❌
    • snake_case ν‘œκΈ°λ²• : 주둜 μƒμˆ˜μ˜ 이름을 μ§€μ •ν•  λ•Œ μ‚¬μš©

       seoul_food ⭕️
       SeoulFood ❌
    • PascalCase ν‘œκΈ°λ²• : 주둜 클래슀의 이름을 μ§€μ •ν•  λ•Œ μ‚¬μš©

       SeoulFood ⭕️
       Seoul_Food ❌
    • μ°Έκ³  자료(μ½”ν‹€λ¦°μ˜ μ½”λ”© μ»¨λ²€μ…˜)
      https://developer.android.com/kotlin/style-guide?hl=ko


πŸ’» 좜λ ₯(Output)κ³Ό μž…λ ₯(Input)

  • 좜λ ₯ : ν”„λ‘œκ·Έλž¨μ—μ„œ λ‹€λ₯Έ μž₯치둜 데이터λ₯Ό μ „μ†‘ν•˜λŠ” ν–‰μœ„
    ex)
    -ν”„λ‘œκ·Έλž¨μ˜ κ²°κ³Όλ₯Ό λͺ¨λ‹ˆν„°λ‘œ 정보 좜λ ₯
    -ν”„λ‘œκ·Έλž¨μ—μ„œ μŠ€ν”Όμ»€λ‘œ μ‚¬μš΄λ“œ 좜λ ₯
    -ν”„λ‘œκ·Έλž¨μ—μ„œ λ©”λͺ¨μž₯으둜 λ‚΄μš© 전달
    -ν”„λ‘œκ·Έλž¨μ—μ„œ USB둜 λ‚΄μš© 전달

  • μž…λ ₯ : λ‹€λ₯Έ μž₯μΉ˜λ‘œλΆ€ν„° 데이터λ₯Ό λΆˆλŸ¬μ™€μ„œ ν”„λ‘œκ·Έλž¨μ—μ„œ ν™•μΈν•˜λŠ” ν–‰μœ„
    ex)
    -ν‚€λ³΄λ“œμ—μ„œ μž…λ ₯ν•œ λ‚΄μš©μ„ λΆˆλŸ¬μ™€μ„œ ν”„λ‘œκ·Έλž¨μ—μ„œ 확인
    -λ§ˆμ΄ν¬μ—μ„œ λ…ΉμŒν•œ λͺ©μ†Œλ¦¬λ₯Ό λΆˆλŸ¬μ™€μ„œ ν”„λ‘œκ·Έλž¨μ—μ„œ 확인
    -λ©”λͺ¨μž₯의 λ‚΄μš©μ„ λΆˆλŸ¬μ™€μ„œ ν”„λ‘œκ·Έλž¨μ—μ„œ 확인
    -USB의 파일λͺ©λ‘μ„ λΆˆλŸ¬μ™€μ„œ ν”„λ‘œκ·Έλž¨μ—μ„œ 확인

  • μ‹€μŠ΅

// 1. λͺ¨λ‹ˆν„°μ— 정보λ₯Ό 좜λ ₯ν•΄ 보기
    fun main() {
    	println("μ•ˆλ…•ν•˜μ„Έμš”")
    	println("λ‚˜λŠ” 코틀린이 μ’‹μ•„μš”")
        print("λ‚˜λŠ” μ½”ν‹€λ¦°μœΌλ‘œ 앱을 λ§Œλ“€κ±°μ˜ˆμš”")
        println("κ³ λ§ˆμ›Œμš”!")
        println("꡿럭!")
    }    // --> μ‹€ν–‰ν•΄ 보면 κ²°κ³Όλ₯Ό μ½˜μ†”μ°½μ— 좜λ ₯λœλ‹€.
    
// 2. ν‚€λ³΄λ“œμ—μ„œ μž…λ ₯ν•œ ν…μŠ€νŠΈλ₯Ό λΆˆλŸ¬μ™€ 보기
    fun main() {
    	val dataString = readLine()
    	println("λ‚˜λŠ” ${dataString }λ₯Ό μž…λ ₯ν–ˆμ–΄μš”!")
    }    /* --> μ‹€ν–‰ν•΄ 보면 μ½˜μ†”μ°½μ—μ„œ μž…λ ₯ν•  수 μžˆλŠ” μƒνƒœκ°€ λœλ‹€. μ½˜μ†”μ°½μ— ν‚€λ³΄λ“œλ‘œ 
        	'kotlin'이라고 μ“°κ³  μ—”ν„° λˆ„λ₯΄λ©΄ λ³€μˆ˜(?) dataString에 λ‹΄κΈ°κ³ , println 
            λͺ…λ Ήμ–΄λ‘œ outputλ˜μ–΄ 'λ‚˜λŠ” kotlinλ₯Ό μž…λ ₯ν–ˆμ–΄μš”!'라고 화면에 λ³΄μ—¬μ§€κ²Œ λœλ‹€.
            (readLineκ°€ ν‚€λ³΄λ“œλ‘œλΆ€ν„° μž…λ ₯된 것을 input λ°›μ•„μ˜€λŠ” λͺ…λ Ήμ–΄μ—¬μ„œ μ½˜μ†”μ— 
            μž…λ ₯ν•œ 것이 λ³€μˆ˜ dataString에 λ“€μ–΄κ°€μ„œ outputλ˜λŠ” 것이닀.) */
    
// 3. ν‚€λ³΄λ“œμ—μ„œ μž…λ ₯ν•œ 숫자(μ •μˆ˜)λ₯Ό λΆˆλŸ¬μ™€ 보기
	fun main() {
    	val dataNumber = readLine()!!.toInt()
		val sum = dataNumber + 3
		println("μž…λ ₯은 ${dataNumber}인데 3을 λ”ν•΄μ„œ ${sum }μ΄μ˜ˆμš”!")
    }    /* --> μ΄λ²ˆμ—” λ¬Έμžκ°€ μ•„λ‹Œ 숫자λ₯Ό 뢈러였기 μœ„ν•΄ μ½˜μ†”μ— 5라고 μ“°κ³  μ—”ν„°λˆ„λ₯΄λ©΄ 
    			κ²°κ³Όκ°€ 'μž…λ ₯은 5인데 3을 λ”ν•΄μ„œ 8μ΄μ—μš”!'라고 outputλœλ‹€.
                (ν‚€λ³΄λ“œμ—μ„œ inputν•΄μ„œ toInt()μ–΄μ©Œκ³ λ‘œ 숫자둜 λ°”λ€Œκ³  λ³€μˆ˜ 
                dataNumber에 λ“€μ–΄κ°€μ„œ outputλœλ‹€.)*/

πŸ’» μžλ£Œν˜•

  • μžλ£Œν˜•μ΄λž€?
    ν”„λ‘œκ·Έλž¨μ˜ λͺ¨λ“  정보λ₯Ό 데이터 λ˜λŠ” 자료라고 ν•˜λŠ”λ°, 그런 데이터 λ˜λŠ” 자료λ₯Ό μ €μž₯ν•  수 μžˆλŠ” μ μ ˆν•œ ν˜•νƒœλ₯Ό μžλ£Œν˜•μ΄λΌκ³  ν•œλ‹€.
    λΉ„νŠΈλŠ” 컴퓨터 λ©”λͺ¨λ¦¬λ₯Ό κ΅¬μ„±ν•˜λŠ” λ°© ν•œμΉΈμ΄λΌκ³  μƒκ°ν•˜μž. (8λΉ„νŠΈ = 1λ°”μ΄νŠΈ)

    ν¬κΈ°νŠΉμ§•
    Long64λΉ„νŠΈμ •μˆ˜
    Int32λΉ„νŠΈμ •μˆ˜
    Short16λΉ„νŠΈμ •μˆ˜
    Byte8λΉ„νŠΈμ •μˆ˜
    Double64λΉ„νŠΈμ‹€μˆ˜(μ†Œμˆ˜)
    Float32λΉ„νŠΈμ‹€μˆ˜(μ†Œμˆ˜)
    char16λΉ„νŠΈν•˜λ‚˜μ˜ 문자(μ˜μ–΄ λ˜λŠ” ν•œκ΅­μ–΄)
    Boolean8λΉ„νŠΈλ…Όλ¦¬(μ°Έ λ˜λŠ” κ±°μ§“)
    StringXλ¬Έμžμ—΄

    ⭐️ μ˜μ–΄λŠ” μžλ£Œν˜•μ΄ 8λΉ„νŠΈλ‘œλ§Œ μ²˜λ¦¬ν•  수 μžˆλŠ”λ°, ν•œκ΅­μ–΄λŠ” 8λΉ„νŠΈκ°€ μ•„λ‹Œ 16λΉ„νŠΈκΉŒμ§€ 지원을 ν•΄μ•Όν•΄μ•Όν•œλ‹€.
    즉, ν•˜λ‚˜μ˜ 문자(ν•œ κΈ€μž)λ₯Ό μ €μž₯ν•  λ•ŒλŠ” μ˜μ–΄λ‘œ ν•œλ‹€λ©΄ Booleanμ΄λ‚˜ Byteλ₯Ό μ‚¬μš©ν•΄λ„ λ˜μ§€λ§Œ ν•œκ΅­μ–΄λ₯Ό ν¬ν•¨ν•˜μ—¬ μ €μž₯ν•΄μ•Ό ν•œλ‹€λ©΄ Charλ₯Ό μ΄μš©ν•˜λŠ” 것이 μ’‹λ‹€.

  • μžλ£Œν˜•μ΄ μ€‘μš”ν•œ 이유?
    μ»΄ν“¨ν„°μ˜ ν•˜λ“œμ›¨μ–΄ 사양은 μ œν•œμ μ΄λ―€λ‘œ μ œν•œμ μΈ μžμ›μ„ 효율적으둜 μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.
    ex)
    - λͺΈλ¬΄κ²Œλ₯Ό μ†Œμˆ˜μ κΉŒμ§€ ν‘œν˜„ν•΄μ•Ό ν•˜λŠ”λ° Intλ‘œλŠ” ν•  수 μ—†μœΌλ‹ˆ Double을 μ‚¬μš©
    - 32λΉ„νŠΈ(Int)λ‘œλ„ μΆ©λΆ„ν•œλ° 64λΉ„νŠΈ(Long)에 μ •μˆ˜λ₯Ό μ €μž₯ν•œ 경우(λ‚­λΉ„)
    - 8λΉ„νŠΈ(Byte)λ‘œλ„ μΆ©λΆ„ν•œλ° 32λΉ„νŠΈ(Int)에 μ •μˆ˜λ₯Ό μ €μž₯ν•œ 경우(λ‚­λΉ„)


πŸ’» λ³€μˆ˜μ™€ μƒμˆ˜

1. λ³€μˆ˜(var)

- λ³€μˆ˜μ˜ ν˜„μ‹€μ„Έκ³„μ—μ„œμ˜ μ˜ˆμ‹œ
    - λΉ„μ˜¬κ±°λΌκ³  μ˜ˆμƒ λͺ»ν–ˆλŠ”λ°β€¦. **날씨가 λ³€μˆ˜**λ„€
    - μˆ˜κ°•μ‹ μ²­μ— 성곡할 수 μžˆμ„κΉŒ? **인터넷 속도**κ°€ λ³€μˆ˜λ„€
    
 - λ³€μˆ˜μ˜ ν”„λ‘œκ·Έλž¨μ„Έκ³„μ˜ μ˜ˆμ‹œ
    - 식당 μ˜ˆμ•½ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€λ•Œμ—λŠ” **맀일 μ˜ˆμ•½μΈμ›**을 λ³€μˆ˜λ‘œ 둬야겠넀
    - μ‡Όν•‘λͺ° ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€λ•Œμ—λŠ” **가격**을 λ³€μˆ˜λ‘œ 둬야겠넀
  • 숫자λ₯Ό λ‚˜νƒ€λ‚΄λŠ” λ³€μˆ˜ μ‹€μŠ΅

    fun() {
    // var num1:Int = 1
    // var λ³€μˆ˜μ΄λ¦„:μžλ£Œν˜•(μƒλž΅κ°€λŠ₯) = κ°’
    // 값을 νŠΉμ • μžλ£Œν˜•μ„ μ €μž₯ν•  수 μžˆλŠ” λ³€μˆ˜μ΄λ¦„μ— λŒ€μž…ν•œλ‹€
    	var num1 = 1
    	println("λ‚΄ μ²«λ³€μˆ˜ num1 λ³€μˆ˜μ—λŠ” ${num1}이 λ“€μ–΄μžˆμ–΄")
    	
        num1 = 5
    	println("λ³€κ²½ν•œ λ³€μˆ˜ num1 λ³€μˆ˜μ—λŠ” ${num1}이 λ“€μ–΄μžˆμ–΄")
     }
     
     /* κ²°κ³Ό --> λ‚΄ μ²«λ³€μˆ˜ num1 λ³€μˆ˜μ—λŠ” 1이 λ“€μ–΄μžˆμ–΄
                λ³€κ²½ν•œ λ³€μˆ˜ num1 λ³€μˆ˜μ—λŠ” 5이 λ“€μ–΄μžˆμ–΄ */
    
  • 문자λ₯Ό λ‚˜νƒ€λ‚΄λŠ” λ³€μˆ˜ μ‹€μŠ΅

    fun() {
    // var one1:Char = 'κΉ€'
    // var λ³€μˆ˜μ΄λ¦„:νƒ€μž…(μƒλž΅κ°€λŠ₯) = κ°’
    // ν•œ κΈ€μžλ₯Ό μ“Έ λ•ŒλŠ” ' 'λ₯Ό μ‚¬μš©ν•œλ‹€.
    	var one1 = 'κΉ€'
    	println("λ‚΄ μ²«λ³€μˆ˜ one1 λ³€μˆ˜μ—λŠ” ${one1}이 λ“€μ–΄μžˆμ–΄")
    	 
        one1 = 'λ‚˜' // one1λ³€μˆ˜μ— λ“€μ–΄μžˆλ˜ 'κΉ€' λŒ€μ‹ μ— 'λ‚˜'λ₯Ό λŒ€μž…
    	println("λ³€κ²½ν•œ λ³€μˆ˜ one1 λ³€μˆ˜μ—λŠ” ${one1}κ°€ λ“€μ–΄μžˆμ–΄")
     }    
      
    /* κ²°κ³Ό --> λ‚΄ μ²«λ³€μˆ˜ one1 λ³€μˆ˜μ—λŠ” 김이 λ“€μ–΄μžˆμ–΄
               λ³€κ²½ν•œ λ³€μˆ˜ one1 λ³€μˆ˜μ—λŠ” λ‚˜κ°€ λ“€μ–΄μžˆμ–΄ */
  • λ¬Έμžμ—΄μ„ λ‚˜νƒ€λ‚΄λŠ” λ³€μˆ˜ μ‹€μŠ΅

    fun() {
    // var name:String = "μ°Έμƒˆ"
    // ν•œ κΈ€μž 이상인 λ¬Έμžμ—΄μ„ μ“Έ λ•ŒλŠ” " "을 μ‚¬μš©ν•œλ‹€.
        var name = "μ°Έμƒˆ"
        println("μƒˆμ˜ 이름을 μ €μž₯ν•˜λŠ” name λ³€μˆ˜μ—λŠ” ${name}κ°€ λ“€μ–΄μžˆμ–΄")
        
        name = "쑰둱박이" // nameλ³€μˆ˜μ— λ“€μ–΄μžˆλ˜ "μ°Έμƒˆ" λŒ€μ‹ μ— "쑰둱박이"λ₯Ό λŒ€μž…
        println("λ³€κ²½ν•œ λ³€μˆ˜ nameμ—λŠ” ${name}κ°€ λ“€μ–΄μžˆμ–΄")
     }
     
    /* κ²°κ³Ό --> μƒˆμ˜ 이름을 μ €μž₯ν•˜λŠ” name λ³€μˆ˜μ—λŠ” μ°Έμƒˆκ°€ λ“€μ–΄μžˆμ–΄
    		   λ³€κ²½ν•œ λ³€μˆ˜ nameμ—λŠ” 쑰둱박이가 λ“€μ–΄μžˆμ–΄ */

⭐️ Java와 달리 Kotlin은 μžλ£Œν˜•μ„ λ”°λ‘œ λͺ…μ‹œν•˜μ§€ μ•Šμ•„λ„ μ•Œμ•„μ„œ μΆ”λ‘ ν•΄μ„œ μƒλž΅μ΄ κ°€λŠ₯!

2. μƒμˆ˜(val)

- μƒμˆ˜μ˜ ν˜„μ‹€μ„Έκ³„μ—μ„œμ˜ μ˜ˆμ‹œ
    - κ·Έ μ„ μˆ˜λŠ” 정말 ν›Œλ₯­ν•˜κ³  기볡이 μ—†μ–΄.. μš°λ¦¬νŒ€μ˜ μƒμˆ˜μ•Ό
    
 - μƒμˆ˜μ˜ ν”„λ‘œκ·Έλž¨μ„Έκ³„μ˜ μ˜ˆμ‹œ
    - 우리 νšŒμ‚¬μ˜ 이름을 λ„£μ–΄μ„œ ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€μ–΄μ•Όν•˜λ„€? νšŒμ‚¬ 이름은 μƒμˆ˜λ‘œ ν•˜μž.
  • μ‹€μŠ΅
fun main() {
	val num1 = 1
	println("λ‚΄ μ²«λ³€μˆ˜ num1 λ³€μˆ˜μ—λŠ” ${num1}이 λ“€μ–΄μžˆμ–΄")

// Val cannot be reassigned(μž¬ν• λ‹Ήμ„ ν•  수 μ—†λ‹€λŠ”) μ—λŸ¬ λ°œμƒ!!
// num1은 var이 μ•„λ‹ˆλΌ valμ΄κΈ°λ•Œλ¬Έμ— λ“€μ–΄μžˆλŠ” 값을 λ³€κ²½ν•˜μ§€ λͺ»ν•¨
	num1 = 5

	println("λ³€κ²½ν•œ λ³€μˆ˜ num1 λ³€μˆ˜μ—λŠ” ${num1}이 λ“€μ–΄μžˆμ–΄")
}
profile
코린이 κ°•μ•„μ§€ μ§‘μ‚¬πŸΆ

0개의 λŒ“κΈ€