๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

Android : scope function ์•Œ์•„๋ณด๊ธฐ ( apply, run, with, let ๋“ฑ๋“ฑ)

by hyeonha 2024. 8. 29.

๋ชฉ์ฐจ

    ๋“ค์–ด๊ฐ€๊ธฐ ์ „์—

    ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด์„œ apply์™€ ๊ฐ™์€ ํ•จ์ˆ˜๋ฅผ ์“ฐ๋ฉด์„œ ์œ ์šฉํ•จ์„ ๋Š๋ผ๊ณ  ์žˆ๋Š”๋ฐ ์ •์ž‘ scope function์ด ๋ฌด์—‡์ธ์ง€ ๊ฐ ์—ญํ• ์ด ๋ฌด์—‡์ธ์ง€ ์ดํ•ดํ•˜๊ณ  ์žˆ์ง€ ์•Š์Œ์„ ๋Š๊ผˆ๋‹ค. 

    ์ด๋ฒˆ ๊ธฐํšŒ์— ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋ณด์ž

    scope function

    : ํŠน์ • ๊ฐ์ฒด์˜ ์ปจํ…์ŠคํŠธ ๋‚ด์—์„œ ํŠน์ • ๋™์ž‘( ํ”„๋กœํผํ‹ฐ ์ดˆ๊ธฐํ™”, ํ™œ์šฉ) ๋“ฑ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ๋งŒ์„ ๊ฐ€์ง€๋Š” ํ•จ์ˆ˜

    ์Šค์ฝ”ํ”„ ํ•จ์ˆ˜๋ฅผ ๋žŒ๋‹ค ํ•จ์ˆ˜๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์ž„์‹œ๋กœ ์Šค์ฝ”ํ”„๋ฅผ ํ˜•์„ฑํ•˜๋Š”๋ฐ ์ด ์Šค์ฝ”ํ”„ ๋‚ด์—์„œ๋Š” ๊ฐ์ฒด์˜ ์ด๋ฆ„์„ ํ†ตํ•ด ์ผ์ผ์ด ์ฐธ์กฐํ•  ํ•„์š”์—†์ด ๊ฐ์ฒด์— ์ ‘๊ทผ & ํ•ธ๋“ค๋งํ•  ์ˆ˜ ์žˆ๋‹ค

    fun main() {
    }
    
    	class Book(var name: String, var price:Int) {
    		fun discount() {
    			print -= 2000
    		}
    	}
    

     

    apply

    • ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜๊ณ  ํŠน์ • ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๊ธฐ ์ „์— ์ดˆ๊ธฐํ™”์ž‘์—…์„ ํ•ด์ค„ ์ˆ˜ ์žˆ๋Š” ์Šค์ฝ”ํ”„ ็”Ÿ
    • apply ํ•จ์ˆ˜ ๋‚ด์˜ ๋ชจ๋“  ๋ช…๋ น์ด ์ˆ˜ํ–‰๋˜๊ณ  ๋‚˜๋ฉด ๋ช…๋ น๋“ค์ด ์ ์šฉ๋˜์–ด ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค ๋ฐ˜ํ™˜
    fun main() {
    
    	var a = Book("๋šฑ์ด์˜ ์ผ๋Œ€๊ธฐ", 10000).apply {
    		name = "์ธ๊ธฐ ์ดˆ์ ˆ์ •" + name 
    		discount()
    	}
    	
    	println("์ƒํ’ˆ๋ช… : ${a.name}, ๊ฐ€๊ฒฉ : ${a.price} ")
    }
    
    	class Book(var name: String, var price:Int) {
    		fun discount() {
    			print -= 2000
    		}
    	}
    

    run

    • ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค๊ฐ€ ์•„๋‹Œ ์Šค์ฝ”ํ”„ ๋‚ด ๋ช…๋ น ์‹คํ–‰ ๊ฒฐ๊ณผ ๊ฐ’
    • ์ด๋ฏธ ๋งŒ๋“ค์–ด์ง„ ์ธ์Šคํ„ด์Šค์˜ ๊ฐ’ ๋˜๋Š” ๊ทธ๋ฅผ ์ด์šฉํ•œ ํŠน์ • ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด run ์„ ์ด์šฉ!
    fun main() {
    
    	var a = Book("๋šฑ์ด์˜ ์ผ๋Œ€๊ธฐ", 10000).apply {
    		name = "์ธ๊ธฐ ์ดˆ์ ˆ์ •" + name 
    		discount()
    	}
    	
    	
    	var bookCost = a.run{
    		println("์ƒํ’ˆ๋ช… : ${name} , ๊ฐ€๊ฒฉ : ${price}")
    		price + 2000
    }
    
    	println("์›๊ฐ€๋Š” $bookCost ์ž…๋‹ˆ๋‹ค.")
    }
    
    	class Book(var name: String, var price:Int) {
    		fun discount() {
    			print -= 2000
    		}
    	}
    

    with

    • run๊ณผ ์ƒ๊ธด ๊ฒƒ๋งŒ ๋‹ค๋ฅผ ๋ฟ ๋™์ž‘์ƒ, ํŠน์ง• ์ฐจ์ด ์—†์Œ
    	var bookCost = a.run{
    		println("์ƒํ’ˆ๋ช… : ${name} , ๊ฐ€๊ฒฉ : ${price}")
    		price + 2000
    }
    
    	var bookCost = with(a){
    		println("์ƒํ’ˆ๋ช… : ${name} , ๊ฐ€๊ฒฉ : ${price}")
    		price + 2000
    	}
    

    also / let

    • it ํ‚ค์›Œ๋“œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅ
    fun main() {
    
    	var price = 9999999
    
    	var a = Book("๋šฑ์ด์˜ ์ผ๋Œ€๊ธฐ", 10000).apply {
    		name = "์ธ๊ธฐ ์ดˆ์ ˆ์ •" + name 
    		discount()
    	}
    	
    	a.run {
    		println("์ƒํ’ˆ๋ช… : ${name}, ๊ฐ€๊ฒฉ : ${price}")
    }
    
    	class Book(var name: String, var price:Int) {
    		fun discount() {
    			print -= 2000
    		}
    	}
    

     

    a๋ผ๋Š” ์ธ์Šคํ„ด์Šค (์ฑ…)์˜ ์ด๋ฆ„๊ณผ ๊ฐ€๊ฒฉ์ด ์ถœ๋ ฅ๋˜๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ–ˆ์ง€๋งŒ ๊ฐ€๊ฒฉ์ด 999999๋กœ ์ถœ๋ ฅ๋œ๋‹ค.also, let์€ ์ด๋Ÿฌํ•œ ํ˜ผ๋ž€์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด it์ด๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

    • ์ด์œ ๋Š” ๋ฐ”๋กœ main ์Šค์ฝ”ํ”„ ๋‚ด์— ์ธ์Šคํ„ด์Šค ํ”„๋กœํผํ‹ฐ์™€ ๊ฐ™์€ ์ด๋ฆ„์˜ ๋ณ€์ˆ˜๊ฐ€ ์žˆ์–ด์„œ ์ด๋ฅผ ์ถœ๋ ฅํ•œ ๊ฒƒ์ด๋‹ค!

    ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค ๋ฐ˜ํ™˜ ์ตœ์ข… ์‹คํ–‰ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜

    apply run
    also let
    728x90