[Javascript] TypeScript interface vs Java interface 차이점

devdo·2024년 10월 6일
0

프론트 스터디

목록 보기
9/9

TypeScript와 Java의 interface는 몇 가지 유사점과 차이점이 있습니다. 두 언어 모두 인터페이스를 사용하여 객체의 구조를 정의하고, 특정 계약을 강제하는 데 사용하지만, 구현 방식과 기능에는 차이가 있습니다.


유사점

계약 정의: 두 언어 모두 인터페이스를 사용하여 클래스가 구현해야 하는 메서드와 속성을 정의합니다. 이는 코드의 일관성을 유지하고, 특정 기능을 강제하는 데 유용합니다.

TypeScript

// TypeScript
interface Animal {
    name: string;
    makeSound(): void;
}

Java

// Java
public interface Animal {
    String getName();
    void makeSound();
}
  • 다형성: 인터페이스를 사용하여 다형성을 구현할 수 있습니다. 여러 클래스가 동일한 인터페이스를 구현함으로써, 인터페이스 타입으로 객체를 다룰 수 있습니다.

차이점

구현 방식:

TypeScript: 인터페이스는 객체의 구조를 정의하는 데 사용되며, 실제 구현은 포함하지 않습니다. 인터페이스는 타입 검사 시에만 사용됩니다.

TypeScript

interface Animal {
    name: string;
    makeSound(): void;
}

class Dog implements Animal {
    name: string;
    constructor(name: string) {
        this.name = name;
    }
    makeSound() {
        console.log("Woof!");
    }
}

Java: 인터페이스는 메서드의 시그니처만 정의하며, 실제 구현은 포함하지 않습니다. 클래스는 implements 키워드를 사용하여 인터페이스를 구현합니다.

Java

public interface Animal {
    String getName();
    void makeSound();
}

public class Dog implements Animal {
    private String name;
    public Dog(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void makeSound() {
        System.out.println("Woof!");
    }
}

다중 상속:

TypeScript: 인터페이스는 다중 상속을 지원합니다. 여러 인터페이스를 확장할 수 있습니다.
TypeScript

interface Animal {
    name: string;
    makeSound(): void;
}

interface Pet {
    owner: string;
}

interface Dog extends Animal, Pet {
    breed: string;
}

Java: 인터페이스는 다중 상속을 지원하지만, 클래스는 단일 상속만 가능합니다. 여러 인터페이스를 구현할 수 있습니다.

Java

public interface Animal {
    String getName();
    void makeSound();
}

public interface Pet {
    String getOwner();
}

public class Dog implements Animal, Pet {
    private String name;
    private String owner;
    public Dog(String name, String owner) {
        this.name = name;
        this.owner = owner;
    }
    public String getName() {
        return name;
    }
    public void makeSound() {
        System.out.println("Woof!");
    }
    public String getOwner() {
        return owner;
    }
}

타입 시스템:

TypeScript: 인터페이스는 타입 시스템의 일부로, 컴파일 타임에만 존재합니다. 런타임에는 제거됩니다1.
Java: 인터페이스는 런타임에도 존재하며, 리플렉션(reflection) 등을 통해 인터페이스 정보를 조회할 수 있습니다2.


요약

유사점: 계약 정의, 다형성 지원
차이점: 구현 방식, 다중 상속 지원, 타입 시스템

profile
배운 것을 기록합니다.

0개의 댓글