And Brain said,

Generic, 프로그래밍 언어의 대명사(Pronouns) 본문

IT/Language & BackEnd

Generic, 프로그래밍 언어의 대명사(Pronouns)

The Man 2023. 4. 6. 23:04
반응형

 

제네릭(Generic)은 프로그래밍 언어에서 타입의 일반화를 가능하게 하는 고급 기능 중 하나로, 코드의 재사용성을 높이고 타입 안전성을 유지하기 위해 사용된다.


제네릭은 타입 매개 변수를 사용하여 일반적인 형태의 클래스, 인터페이스, 메소드 등을 작성할 수 있게 해주며, 이를 통해 개발자들은 여러 데이터 타입에 적용할 수 있는 공통 로직을 정의할 수 있으며, 컴파일 시점에 타입 검사를 수행하여 타입 안전성을 보장할 수 있게 된다.

 

제네릭을 사용할 때는 특정 타입에 의존하지 않도록 주의하고, 제네릭 타입 변수를 올바르게 사용해야 한다.

일부 프로그래밍 언어에서는 타입 추론이 가능하여 제네릭 타입 변수를 명시하지 않아도 될 수 있지만 가독성을 위해 필요한 경우 명시적으로 제네릭 타입을 지정하는 것이 좋다.

또, 때로는 제네릭 타입 변수에 제한을 두어야 하는 경우가 있는데, 이 때는 상속 관계나 인터페이스 구현 등을 이용해 타입 제한을 두어야 한다.

그리고 일부 언어에서는 제네릭과 배열을 함께 사용할 때 주의해야 하는데, 예를 들어, Java에서는 제네릭 배열을 직접 생성할 수 없으며, 타입이 지워진 배열로 캐스팅해야 한다.

 

 

자, 여기까지 제네릭에 관해 간단히 배워봤고 본론으로 들어가자.

 

제네릭은 많은 프로그래밍 언어에서 제공되며, 각 언어마다 구현 방식이 다소 다른데, 오늘은 Java를 통해 배워보자.

 

public class Box<T> {
    private T content;

    public Box(T content) {
        this.content = content;
    }

    public T getContent() {
        return content;
    }

    public void setContent(T content) {
        this.content = content;
    }
}

 

제네릭 타입을 사용한 간단한 Box Class를 만들어보자.

 

이를 사용하여 여러 데이터 타입에 대한 Box 객체를 생성할 수 있게된다.

 

// 정수형 값을 저장하는 Box 객체를 생성
Box<Integer> intBox = new Box<>(1);
// 문자열 값을 저장하는 Box 객체를 생성
Box<String> strBox = new Box<>("Hello, World!");

// 정수형 값을 Box 객체에 저장
intBox.setContent(2);
// 문자열 값을 Box 객체에 저장
strBox.setContent("Goodbye, World!");

// 저장된 값을 가져와서 변수에 할당
Integer intValue = intBox.getContent();
String strValue = strBox.getContent();

 

이렇게 하면 동일한 컨테이너 클래스를 여러 타입에 대해 재사용할 수 있으며, 타입 안전성을 보장할 수 있게된다.

하지만 제네릭을 사용하지 않으면, 모든 타입의 객체를 저장할 수 있도록 Object를 사용해야 하는데, 이렇게 하면 타입 캐스팅이 필요하고, 런타임 오류의 위험이 증가하게 된다.

 

제네릭을 사용하지 않고 새로운 Class를 만들어보자.

 

public class NonGenericBox {
    private Object content;

    public NonGenericBox(Object content) {
        this.content = content;
    }

    public Object getContent() {
        return content;
    }

    public void setContent(Object content) {
        this.content = content;
    }
}

NonGenericBox nonGenericBox = new NonGenericBox("Hello");
nonGenericBox.setContent(1);
String nonGenericStr = (String) nonGenericBox.getContent(); // ClassCastException 발생

 

위의 코드에서 볼 수 있듯이 제네릭을 사용하지 않을 경우, 런타임에 ClassCastException이 발생할 수 있다.

 


오늘은 우리가 제네릭이 무엇인지, 왜 사용하는지에 대해 알아보았다.

 

이제, 제네릭을 이용해 프로그래밍 언어에서 타입 파라미터를 사용하여 코드의 재사용성을 높이고, 타입 안전성을 보장하고, 또한 더 간결하고 유지 보수하기 쉬운 코드를 작성해보도록 하자.

 

 

Thanks for watching, Have a nice day.

반응형
Comments