Java에서는 데이터 타입을 크게 기본 데이터 타입(Primitive Data Types)과 비기본 데이터 타입(Non-Primitive Data Types)으로 나눌 수 있습니다. 비기본 데이터 타입은 객체를 참조하며, 변수에 데이터 자체가 아닌 데이터의 메모리 주소를 저장합니다. 비기본 데이터 타입에는 클래스, 배열, 문자열, 인터페이스 등이 있으며, 다양한 데이터를 효율적으로 저장하고 처리하는 데 필수적인 역할을 합니다. 이번 글에서는 Java의 비기본 데이터 타입과 그 활용법을 예제와 함께 살펴보겠습니다.
비기본 데이터 타입이란?
비기본 데이터 타입은 기본 데이터 타입과 달리 객체를 참조하는 타입입니다. 참조 타입은 Java에서 객체 지향 프로그래밍의 기반이 되며, 기본 타입과 달리 다양한 기능을 제공합니다. 비기본 데이터 타입의 변수에는 데이터 자체가 아닌, 해당 데이터가 저장된 메모리 주소가 저장됩니다.
Java의 주요 비기본 데이터 타입
Java의 비기본 데이터 타입에는 다음과 같은 것들이 있습니다:
- 클래스 (Class)
- 문자열 (String)
- 배열 (Array)
- 인터페이스 (Interface)
각 비기본 데이터 타입의 특징과 사용법을 예제를 통해 알아보겠습니다.
1. 클래스 (Class)
클래스는 객체 지향 프로그래밍의 핵심 요소로, 객체의 청사진 역할을 합니다. 클래스는 객체의 속성과 동작을 정의하며, 이를 통해 객체를 생성할 수 있습니다. Java에서는 클래스 타입 변수를 사용하여 객체를 참조합니다.
클래스 선언 예제
public class Car {
String model;
int year;
// 생성자
public Car(String model, int year) {
this.model = model;
this.year = year;
}
// 메서드
public void displayInfo() {
System.out.println("모델: " + model + ", 연도: " + year);
}
}
public class Main {
public static void main(String[] args) {
Car myCar = new Car("Tesla Model 3", 2023); // 객체 생성
myCar.displayInfo(); // 메서드 호출
}
}
출력 결과:
모델: Tesla Model 3, 연도: 2023
위 예제에서는 Car
라는 클래스를 정의하고, Car
클래스의 객체 myCar
를 생성했습니다. myCar
는 클래스의 속성 model
과 year
를 참조하며, 메서드 displayInfo()
를 호출하여 객체 정보를 출력합니다.
2. 문자열 (String)
String
은 문자를 저장하고 조작하는 데 사용되는 클래스입니다. Java에서 문자열은 참조 타입이지만, 기본 타입처럼 간단하게 사용할 수 있으며 ""
로 감싸서 표현합니다. String
은 불변(immutable)하며, 문자열 조작을 위한 다양한 메서드를 제공합니다.
String 예제
public class StringExample {
public static void main(String[] args) {
String greeting = "Hello, Java!";
String name = "Alice";
String message = greeting + " " + name;
System.out.println("인사 메시지: " + message);
System.out.println("메시지 길이: " + message.length());
System.out.println("대문자로 변환: " + message.toUpperCase());
}
}
출력 결과:
인사 메시지: Hello, Java! Alice
메시지 길이: 16
대문자로 변환: HELLO, JAVA! ALICE
위 코드에서는 String
의 연결, 길이 구하기, 대문자 변환 등의 메서드를 사용하여 문자열을 다룹니다.
3. 배열 (Array)
배열은 같은 타입의 데이터를 저장하는 자료 구조입니다. 배열은 고정된 크기를 가지며, 각 요소는 인덱스를 통해 접근할 수 있습니다. Java에서 배열은 객체로 취급되며, []
기호를 사용하여 선언합니다.
배열 예제
public class ArrayExample {
public static void main(String[] args) {
int[] numbers = {1, 2, 3, 4, 5}; // 정수형 배열 선언 및 초기화
System.out.println("배열의 첫 번째 요소: " + numbers[0]);
System.out.println("배열 길이: " + numbers.length);
System.out.print("배열 요소: ");
for (int num : numbers) {
System.out.print(num + " ");
}
}
}
출력 결과:
배열의 첫 번째 요소: 1
배열 길이: 5
배열 요소: 1 2 3 4 5
위 코드에서는 배열 numbers
를 선언하고, 각 요소에 접근하여 배열의 값을 출력합니다. numbers.length
를 통해 배열의 길이를 확인할 수 있습니다.
4. 인터페이스 (Interface)
인터페이스는 클래스가 구현해야 할 메서드를 정의하는 추상 타입입니다. 인터페이스는 다형성을 지원하며, 여러 클래스가 같은 인터페이스를 구현하여 일관된 메서드를 제공할 수 있습니다.
인터페이스 예제
interface Animal {
void sound(); // 추상 메서드
}
class Dog implements Animal {
public void sound() {
System.out.println("멍멍");
}
}
class Cat implements Animal {
public void sound() {
System.out.println("야옹");
}
}
public class InterfaceExample {
public static void main(String[] args) {
Animal myDog = new Dog();
Animal myCat = new Cat();
myDog.sound();
myCat.sound();
}
}
출력 결과:
멍멍
야옹
위 코드에서는 Animal
인터페이스를 선언하고, Dog
와 Cat
클래스가 이를 구현합니다. sound()
메서드를 통해 각 클래스의 고유한 소리를 출력합니다.
비기본 데이터 타입과 기본 데이터 타입의 차이
- 기본 데이터 타입은 고정된 크기의 메모리 공간을 차지하며, 값 자체를 저장합니다.
- 비기본 데이터 타입은 객체의 참조를 저장하며, 다양한 데이터와 기능을 제공합니다.
- 비기본 데이터 타입은
null
값을 가질 수 있는 반면, 기본 타입은null
을 가질 수 없습니다.
결론
Java의 비기본 데이터 타입은 객체 지향 프로그래밍의 중요한 요소로, 데이터와 메서드를 포함한 객체를 참조하는 역할을 합니다. 클래스, 배열, 문자열, 인터페이스와 같은 비기본 데이터 타입은 프로그램의 구조와 데이터 처리에 강력한 유연성을 제공합니다. 각 비기본 데이터 타입의 특징과 활용법을 잘 이해하고 실제 프로젝트에서 효율적으로 활용해 보세요!
댓글 쓰기