ํŒŒ์ด์ฌ๊ณผ ์กฐ๊ฑด๋ฌธ

ํŒŒ์ด์ฌ์—์„œ๋Š” ์•„๋ž˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ ์กฐ๊ฑด๋ฌธ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

if a == 1:
    print ("Hello 1")
elif a == 2:
    print ("Hello 2")
elif a == 3:
    print ("Hello 3")
elif a == 4:
    print ("Hello 4")
elif a == 5:
    print ("Hello 5")
else:
    print ("Hello Everyone")

C, C++ ๋˜๋Š” Java ์–ธ์–ด์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ if ~ else if ~ else ๋ฌธ์žฅ์„ ์ง€์›ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด switch ๋ฌธ์žฅ์€ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ• ๊นŒ์š”?

์ž๋ฐ” ์–ธ์–ด๋ฅผ ์˜ˆ๋กœ ๋“ค์œผ๋ฉด ์œ„ ๋ฌธ์žฅ์„ ์•„๋ž˜์™€ ๊ฐ™์€ switch ๋ฌธ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

switch (a) {
    case 1:
        System.out.println("Hello 1");
    case 2:
        System.out.println("Hello 2");
    case 3:
        System.out.println("Hello 3");
    case 4:
        System.out.println("Hello 4");
    case 5:
        System.out.println("Hello 5");
    default:
        System.out.println("Hello Everyone");
}

๊ทธ๋Ÿฐ๋ฐ ์•„์‰ฝ๊ฒŒ๋„ ํŒŒ์ด์ฌ์—๋Š” ์œ„์ฒ˜๋Ÿผ switch ์กฐ๊ฑด๋ฌธ์ด ์—†์Šต๋‹ˆ๋‹ค. ๊ฝค ์•„์‰ฌ์šด ๋ถ€๋ถ„์ด๊ธด ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋”•์…”๋„ˆ๋ฆฌ(Dictionary)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์œ ์‚ฌํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


ํŒŒ์ด์ฌ์œผ๋กœ switch ํ‰๋‚ด๋‚ด๊ธฐ

๋”•์…”๋„ˆ๋ฆฌ(Dictionary)๋Š” ํ‚ค์™€ ๋ฐ์ดํ„ฐ ๊ฐ’์ด ํ•œ ์Œ์„ ์ด๋ฃจ๋Š” ์ž๋ฃŒํ˜•์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์ด์šฉํ•œ๋‹ค๋ฉด ์šฐ๋ฆฌ๊ฐ€ ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ•˜๋Š” switch ์กฐ๊ฑด๋ฌธ๊ณผ ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# -*- coding: utf-8 -*-

def hello(a):
	return {
		1: "Hello 1",
		2: "Hello 2",
		3: "Hello 3",
		4: "Hello 4",
		5: "Hello 5",
	}.get(a, "Hello Everyone")

def main():
	print(hello(2)); # Hello 2
	print(hello(6)); # Hello Everyone

if __name__ == "__main__":
	main() 

ํ•จ์ˆ˜(Function)์™€ ์กฐํ•ฉํ•ด์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

# -*- coding: utf-8 -*-

def hello1():
	print("Hello 1")

def hello2():
	print("Hello 2")	

# ... ์ƒ๋žต

def main():
	hello_switcher = {
		1: hello1,
		2: hello2,
		3: hello3,
		4: hello4,
		5: hello5,
	}
	try:
	    # Hello 2 ์ถœ๋ ฅ, ํ•จ์ˆ˜ ํ˜ธ์ถœ
		hello_switcher[2]()
		# Hello Everyone ์ถœ๋ ฅ, ํ•จ์ˆ˜ ํ˜ธ์ถœ
		hello_switcher[-1]()
	except Exception as e:
		print (e)
		print("Hello Everyone")

if __name__ == "__main__":
	main()

๋ฐฉ๊ธˆ ์‚ดํŽด๋ณธ ์ฝ”๋“œ๋ฅผ lambda๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์กฐ๊ธˆ ๋ณ€๊ฒฝํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜ํ™˜๋œ ๊ฐ’์ด ๋žŒ๋‹ค ํ˜•ํƒœ์ธ์ง€ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด isinstance ํ•จ์ˆ˜๋„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

import types

# -*- coding: utf-8 -*-

def hello1(val):
	print("Hello" + val)

def hello2(val):
	print("Hello" + val)	

# ... ์ƒ๋žต

def hello_switcher(val):
	hello = {
		1: lambda: hello1(str(val)),
		2: lambda: hello2(str(val)),
		3: lambda: hello3(str(val)),
		4: lambda: hello4(str(val)),
		5: lambda: hello5(str(val))
	}
	helloFunc = hello.get(val, "Hello Everyone")
	
	# isinstance(a, b) : a๊ฐ€ bํƒ€์ž…์ธ๊ฐ€?
	if isinstance(helloFunc, types.LambdaType):
		helloFunc()
	else:
		print (helloFunc)

def main():
    # Hello 2
	hello_switcher(2)
	# Hello Everyone
	hello_switcher(6)

if __name__ == "__main__":
	main()

์œ„์—์„œ ์‚ดํŽด๋ณธ ๊ฒƒ์ฒ˜๋Ÿผ ํŒŒ์ด์ฌ์—์„œ๋Š” switch ๋ฌธ์ด ์—†์–ด๋„ ๋”•์…”๋„ˆ๋ฆฌ(Dictionary)๋ฅผ ์ด์šฉํ•ด์„œ ์œ ์‚ฌํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.