C, C++, Java
변수에 들어갈 값의 형태에 따라 자료형을 지정해줘야함
컴파일 시 자료형에 맞지 않는 값이 들어있으면 컴파일 에러 발생
JavaScript, Ruby, Python
실행 시에 자료형을 결정함
내 생각으로 그냥 봤을 때, 정적 타입이 더 좋아보인다. (처음 배운 언어가 정적언어라 그런지)
타입을 지정하기 귀찮아서?
→ 미친듯한 편리(유연함) 때문에
만약 어떤 함수에서 매개변수로 들어온 값들을 더하고 그 값을 리턴한다고 할때
파이썬의 경우에는
**def add(a, b):
return a + b
print(add(1, 2)) # 숫자 더하기
print(add("a", "b")) # 문자열 더하기**
이렇게 하면 뚝딱인데
자바의 경우에는
public class Test {
static int add(int a, int b) {
return a + b;
}
static String add(String a, String b) {
return a + b;
}
public static void main(String[] args) {
System.out.println(add(1, 2)); // 3
System.out.println(add("a", "b")); // ab
}
}
public class Test {
static <T> Object add(T a, T b) {
if (a instanceof Integer && b instanceof Integer) {
return (Integer) a + (Integer) b;
} else if (a instanceof String && b instanceof String) {
return a.toString() + b.toString();
}
return null;
}
public static void main(String[] args) {
System.out.println(add(1, 2)); // 3
System.out.println(add("a", "b")); // ab
}
}
간단하게는 오버로딩부터, 심하게는 제네릭을 써야한다