[Java 06] Generic Programming

Generic Programming

- 다양한 자료형의 객체에 대해 작성한 코드재사용한다는 객체 지향 기법

 

| 필요성

- Generic 프로그래밍이 없었다면 아래 코드에 대해 type이 달라질 때마다 매번 비슷한 코드를 추가로 만들어야 함.

public class SS {

	// public Person[] superSort(Person[] array){
	// public String[] superSort (String[] array){
	public int[] superSort (int[] array){
			// .... sort ....
			return array;
	}
}

→ 위와 같이 코드를 짜면 int, String, Person 등 자료형이 달라질 때마다 동일한 method가 추가되어야 함.

- 이와 같이 코드를 짜면 비효율적임.

- 잘 작성된 한 가지의 코드만 사용해서 모든 타입을 이용할 수 있도록 함.

 

 

| 장점

1. 코드의 재사용성이 높아짐.

2. type safety컴파일 단계에서 잘못된 타입이 입력되는 것을 방지(런타임보다는 컴파일 단계에서 문제를 아는 것이 좋다.)

 

 ✔️Generic을 사용하지 않은 경우 - 런타임 에러

// Java program to demonstrate that NOT using
// generics can cause run time exceptions
 
import java.util.*;
 
class Test
{
    public static void main(String[] args)
    {
        // Creatinga an ArrayList without any type specified
        ArrayList al = new ArrayList();
 
        al.add("Sachin");
        al.add("Rahul");
        al.add(10); // Compiler allows this
 
        String s1 = (String)al.get(0);
        String s2 = (String)al.get(1);
 
        // Causes Runtime Exception
        String s3 = (String)al.get(2);
    }
}

→ "al.add(10);"은 컴파일러가 허용한다. 그러나 실행 시 아래와 같이 런타임 에러 발생

// 위 코드에 대한 출력
Exception in thread "main" java.lang.ClassCastException: 
   java.lang.Integer cannot be cast to java.lang.String
    at Test.main(Test.java:19)

 

 

✔️ Generic을 사용한 경우 - 컴파일 에러

// Using Java Generics converts run time exceptions into
// compile time exception.
import java.util.*;
 
class Test
{
    public static void main(String[] args)
    {
        // Creating a an ArrayList with String specified
        ArrayList <String> al = new ArrayList<String> ();
 
        al.add("Sachin");
        al.add("Rahul");
 
        // Now Compiler doesn't allow this
        al.add(10);
 
        String s1 = (String)al.get(0);
        String s2 = (String)al.get(1);
        String s3 = (String)al.get(2);
    }
}

→ "al.add(10);"은 컴파일러가 허용하지 않음.

// 위 코드에 대한 출력
15: error: no suitable method found for add(int)
        al.add(10); 
          ^

 

 

Class 정의 시 오버라이드 해야 할 Object class의 메서드

1. equals()

 - 객체의 메모리 주소 비교

2. toString()

- 객체의 메모리 주소 출력

3. hashCode()

- 메모리에 생성된 객체의 주소를 정수로 변환한 고유한 hash code 값을 반환

 


✔️ 참고

 

자바로 구현하고 배우는 자료구조

부스트코스 무료 강의

www.boostcourse.org

 

 

Generics in Java - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org