사실 Java 를 처음 배우면 제일 먼저 접하게 되는데 기본 자료형이고 이 쓰임이 너무 간편하니 매번 기본 자료형으로만 코드를 짜려고 했다. 그래서 왜 참조 타입을 사용해야 할까 라는 의문을 가지고 찾아보기 시작했다.
객체 지행 프로그래밍(OOP) 지원
- 참조 타입은 객체 지향 프로그램의 핵심이다. Java 에서는 모든 클래스가 참조 타입이며 클래스는 상태 (필드) 와 행동 (메서드)을 갖는 객체를 생성한다.
- 객체 지향 개념의 상속, 캡슐화, 다형성을 구현 할 수 있게 해주며, 이를 통해 더 효율적이고 유지보수하기 쉬운 코드를 작성할 수 있다.
복잡한 데이터 구조와 추상화 제공
- 참조 타입은 복잡한 데이터 구조를 구현 할 수 있게 해주며, 메모리 주소를 통해 이것들을 조작한다.
예를 들어, List<String> 과 같은 컬렉션을 사용할 때, 리스트 안에 들어가는 요소들은 다양한 참조 타입일 수 있으며, 각 요소는 크기와 구조가 다를 수 있다. 이게 가능한 이유는 참조 타입이 동적 크기와 추상화를 제공하기 때문이다.
Null 값을 통한 값 없을 표현 가능
- 참조 타입은 기본 타입과 다르게 Null 값을 허용한다. 메서드에서 값을 반환하지 않는 경우에 null을 반환하여 호출자에게 특별한 상태를 전달 할 수 있다.
유틸리티 메서드와 추가 기능 제공
- 참조 타입인 클래스는 단순하게 값을 저장하는 역할만 하는 것이 아니라, 다양한 유틸리티 메서를 제공한다. 예를 들어 Integer클래스는 parseInt(), compareTo(), toString() 등 여러 메서드를 제공하여, 숫자 변환, 비교, 출력 등 다양한 작업을 수행 할 수 있게 해준다.
컬렉션과 제네릭에서의 사용
- 참조 타입은 제네릭(Generic) 을 사용할 때 필수적이다. 기본 타입은 제네릭에서 사용할 수 없지만 Integer, Double 과 같은 Wrapper Class (래퍼 클래스)는 제네릭과 함께 사용 가능하여 타입 안정성을 제공한다.
- Java의 다양한 컬렉션은 참조 타입을 활용해야 한다. 이런 컬렉션들은 메모리 내에서 데이터를 효율적으로 관리하고 조작할 수 있게 해준다.
상태와 행동을 함께 가질 수 있음
- 기본 타입은 단순히 하나의 값만 저장하지만 참조 타입은 상태와 행동을 함께 가질 수 있다.
예를 들어, 아래와 같이 상태와 행동을 함께 갖는 객체를 객체 단위로 관리하고 이해 할 수 있게 한다.
public class Person {
// 상태(필드)
private String name;
private int age;
// 생성자
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// 행동(메서드)
public void greet() {
System.out.println("안녕하세요! 제 이름은 " + name + "이고, 나이는 " + age + "살입니다.");
}
}
public class Main {
public static void main(String[] args) {
// Person 객체 생성
Person person1 = new Person("해니", 100);
// 행동(메서드) 호출
person1.greet(); // 출력: 안녕하세요! 제 이름은 해니이고, 나이는 100살입니다.
}
}
메모리 할당의 유연성
- 기본타입은 크기가 고정되어 있지만 참조타입은 동적 할 당이 가능하다.
참조 타입은 객체 지향 프로그래밍 언어의 핵심으로 다양한 기능과 유연성을 제공하므로 복잡한 시스템에서는 필수적이다. 기본 타입은 단순하게 데이터를 저장하고 처리하는 용도로 적합하지만, 참조 타입은 데이터와 데이터터에 대한 연산을 캡슐화하고 추상화 할 수 있다.
'JAVA' 카테고리의 다른 글
Java int 와 Integer 의 차이 (0) | 2024.11.20 |
---|---|
Java 문자열 뒤집기 - reverse() (0) | 2024.11.19 |
Java 기본 자료형(Primitive Type)과 참조 자료형(Reference Type)의 차이 (0) | 2024.11.16 |
Java 기본 자료형(Primitive Type)과 참조 자료형(Reference Type)의 차이 - 메모리 (1) | 2024.11.15 |
Scanner를 그만 쓰고 BufferReader/BufferedWriter를 사용하자 (0) | 2024.11.14 |