
자바 기본 문법 – 변수와 데이터 타입 – 1 – 참조 데이터 타입 (클래스, 인터페이스 등)
안녕하세요! 자바 기본 문법 중 변수와 데이터 타입에 대해 이야기해보려고 합니다. 이번에는 참조 데이터 타입에 대해서 알아보겠습니다. 참조 데이터 타입은 클래스, 인터페이스 등을 말합니다. 이해를 돕기 위해 비유를 사용하여 설명해드리겠습니다.
소제목 1: 클래스 – 객체를 만들기 위한 청사진
자바에서 클래스는 객체를 만들기 위한 청사진(blueprint)이라고 생각할 수 있습니다. 객체는 여러 가지 속성과 행동을 가지는데, 이를 클래스로 정의하고 객체를 생성할 수 있습니다. 예를 들어, ‘사람’을 표현하는 클래스를 만든다고 가정해봅시다.
public class Person {
String name;
int age;
public void introduce() {
System.out.println("안녕하세요, 저는 " + name + "이고, " + age + "살입니다.");
}
}
위의 코드에서는 ‘Person’이라는 클래스를 정의하였습니다. ‘name’과 ‘age’라는 속성을 가지고 있고, ‘introduce()’라는 메서드를 가지고 있습니다. ‘name’은 문자열을, ‘age’는 정수를 저장하는 변수입니다. ‘introduce()’ 메서드는 해당 객체를 소개하는 역할을 합니다. 이제 이 클래스를 사용하여 객체를 생성하고 속성에 값을 할당해보겠습니다.
Person person1 = new Person();
person1.name = "홍길동";
person1.age = 20;
person1.introduce();
위의 코드에서는 ‘Person’ 클래스를 이용하여 ‘person1’ 객체를 생성하였습니다. 그리고 ‘name’과 ‘age’ 속성에 값을 할당한 뒤, ‘introduce()’ 메서드를 호출하여 소개를 출력하였습니다.
소제목 2: 인터페이스 – 표준 규약을 정의하는 계약서
이번에는 인터페이스에 대해 이야기해보겠습니다. 인터페이스는 클래스가 따라야 하는 표준 규약을 정의하는 것으로 생각할 수 있습니다. 비유를 사용하자면, 인터페이스는 계약서와 같습니다. 계약서에는 특정한 일련의 규칙과 조건들이 명시되어 있습니다.
예를 들어, ‘움직일 수 있는’ 능력을 가진 객체들의 표준 규약을 ‘Movable’ 인터페이스로 정의해보겠습니다.
public interface Movable {
void move();
}
위의 코드에서는 ‘Movable’ 인터페이스를 정의하였습니다. 이 인터페이스에는 ‘move()’라는 추상 메서드가 포함되어 있습니다. 이제 이 인터페이스를 구현하는 클래스를 만들어 보겠습니다.
public class Car implements Movable {
public void move() {
System.out.println("자동차가 움직입니다.");
}
}
위의 코드에서는 ‘Car’ 클래스가 ‘Movable’ 인터페이스를 구현하도록 선언하였습니다. ‘move()’ 메서드를 구현하여 자동차가 움직인다는 기능을 정의하였습니다. 이제 인터페이스를 이용하여 객체를 생성하고 메서드를 호출해보겠습니다.
Movable movable = new Car();
movable.move();
위의 코드에서는 ‘Movable’ 인터페이스를 이용하여 ‘movable’ 객체를 생성하였습니다. 이 객체는 ‘Car’ 클래스의 인스턴스를 참조하고 있습니다. ‘move()’ 메서드를 호출하면 자동차가 움직인다는 메시지가 출력됩니다.
소제목 3: 클래스와 인터페이스 – 협업과 다형성의 가능성
클래스와 인터페이스는 함께 협업하여 다형성(polymorphism)을 구현하는데 사용될 수 있습니다. 다형성은 객체가 여러 가지 타입을 가질 수 있는 능력을 의미합니다. 이를 통해 유연하고 확장 가능한 코드를 작성할 수 있습니다.
예를 들어, ‘Shape’이라는 추상 클래스를 만들고 여러 도형 클래스가 이를 상속하도록 해보겠습니다.
public abstract class Shape {
public abstract void draw();
}
public class Circle extends Shape {
public void draw() {
System.out.println("원을 그립니다.");
}
}
public class Rectangle extends Shape {
public void draw() {
System.out.println("사각형을 그립니다.");
}
}
위의 코드에서는 ‘Shape’ 클래스를 추상 클래스로 정의하였습니다. ‘draw()’ 메서드를 추상 메서드로 선언하여 도형을 그리는 기능을 정의하였습니다. ‘Circle’과 ‘Rectangle’ 클래스는 ‘Shape’ 클래스를 상속받아 각각 원과 사각형을 그리는 기능을 구현하였습니다.
Shape circle = new Circle();
Shape rectangle = new Rectangle();
circle.draw(); // "원을 그립니다." 출력
rectangle.draw(); // "사각형을 그립니다." 출력
위의 코드에서는 ‘Shape’ 타입의 변수인 ‘circle’과 ‘rectangle’을 선언하고, 각각 ‘Circle’과 ‘Rectangle’ 클래스의 인스턴스를 참조하도록 하였습니다. ‘draw()’ 메서드를 호출하면 각 도형에 맞는 그리기 기능이 수행됩니다.
주의해야 할 점
- 클래스와 인터페이스는 다른 종류의 데이터 타입이기 때문에 변수로 사용될 수 있습니다.
- 클래스는 객체의 속성과 행동을 정의하는 청사진이며, 인스턴스를 생성하여 사용합니다.
- 인터페이스는 클래스가 따라야 하는 표준 규약을 정의하며, 다중 상속이 가능하고 다형성을 구현할 수 있습니다.
- 클래스와 인터페이스를 함께 사용하여 유연하고 확장 가능한 코드를 작성할 수 있습니다.
- 클래스와 인터페이스의 관계를 이해하고, 상황에 맞게 적절히 사용하는 것이 중요합니다.
이상으로 자바 기본 문법 중 참조 데이터 타입에 대해 알아보았습니다. 변수와 데이터 타입에 대한 기본 개념을 이해하고, 클래스와 인터페이스의 활용 방법을 익히는 것이 중요합니다. 앞으로 자바를 공부하시는 분들께 도움이 되길 바랍니다!