본문 바로가기
etc.

[Java/Python] 문법 비교 정리 #3 함수 선언

by Lee David 2022. 11. 2.
반응형

Java에서의 함수 선언

// 접근레벨에 따라 public, protected, private 등을 사용 가능합니다.

// 1. return 하지 않는 함수
public void voidFunction() {
    System.out.println("Hello World");
}

// 2. 숫자형 데이터를 return 하는 함수
public int intFunction() {
    return 10;
}

자바에서는 함수에서 return하지 않는 경우 함수를 참조하는 코드에서 null 조차 결과 값으로 담을 수 없습니다.


Python에서의 함수 선언

기본적으로 사용하는 함수 선언
# 기본형
def f(a, b):
    return a + b
    
# argument에 default value 지정 
def f(a = 1, b = 2):
    return a + b # argument를 추가하지 않더라도 default value가 확인되어 Error가 발생하지 않습니다.
Error가 발생하는 유형
# 첫번째 argument에만 default value 지정 
def f(a = 1, b):
    return a + b
# Type Error를 발생시킨다.
# 첫번째 argument에만 default로 지정할 시에 뒤에오는 argument에 대해 정확한 값이 불분명해진다
# ex) dictionary 구조, 혹은 tuple과 list의 형태의 데이터

# 이슈 해결 코드
def f(b, a = 1):
    return a + b

#######################################################

# list/tuple 형식의 argument 이후에 default가 지정되지 않은 argument가 확인될때
def f(*a:int, sep="/", test):
    b = map(str, a)
    print(sep.join(b) + test)

f(1,2,3,4,5, sep=',', '-end') # test를 지정해주지 않아 정확한 argument 정보를 참조 하지 못합니다.
f(1,2,3,4,5, sep=',', test='-end') # test 지정 후 동작 오류 해결, 결과 - 1,2,3,4,5-end

#######################################################

# dictionary 형태의 데이터를 받을 경우
def f(name, **kwargs, email="test@test.com"):
    print(f"name={name}, email={email}, kwargs={kwargs}")

f(name="test", email="t@t.com", mobile="01012341234")

# 이슈 해결 코드
def f(name, email="test@test.com", **kwargs):
    print(f"name={name}, email={email}, kwargs={kwargs}")

파이썬에서 함수에 argument를 대입할때에 여러가지 자료구조를 사용할수 있는 폭 넓은 방식 때문입니다.

java와는 다르지만 함수의 활용 범위를 고려했을때는 환영받을 방식이라고 보여집니다.

하지만 폭 넓게 사용하더라도 함수에 참조되는 argument들에 대해서 명확한 표기가 없을시 Python에서는 오류를 뱉어 내는걸 확인 할 수 잇습니다.

반응형