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 값을 반환
✔️ 참고
'Java' 카테고리의 다른 글
[Java 08] Autoboxing - primitive type & Wrapper class (0) | 2023.08.09 |
---|---|
[Java 07] 매개 변수화 타입(Parameterized Type) (0) | 2023.08.09 |
[Java 05] 객체 비교 - equals(), Comparable (0) | 2023.08.09 |
[Java 04] 객체와 상속 (0) | 2023.08.08 |
[Java 03] 객체지향 프로그래밍 1 - 객체, 클래스, OOP란? (0) | 2023.07.20 |