정적 언어 vs 동적 언어

안재민·2025년 4월 5일

JAVA

목록 보기
5/6

정적타입 언어 Statically typed language

  • 컴파일 시 변수 타입이 결정 되는 언어

C, C++, Java

변수에 들어갈 값의 형태에 따라 자료형을 지정해줘야함

컴파일 시 자료형에 맞지 않는 값이 들어있으면 컴파일 에러 발생

장점

  • 타입 에러는 초기에 발견 할 수 있음 → 안정성 높아짐
  • 컴파일 시 미리 타입을 결정 → 실행 속도 빠름

동적타입 언어 Dynamically typed languages

  • 런타임 시 변수의 타입이 결정되는 언어

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
    }
}

간단하게는 오버로딩부터, 심하게는 제네릭을 써야한다

0개의 댓글