Java는 객체 지향 프로그래밍(OOP)의 기초로 설계된 언어입니다. OOP는 데이터를 객체로 캡슐화하여 코드의 재사용성과 유지보수성을 높이는 프로그래밍 패러다임입니다. 이번 글에서는 클래스와 객체의 기본 개념을 이해하고, Java로 객체 지향 프로그래밍을 시작하는 방법을 알아보겠습니다.
1. 객체 지향 프로그래밍(OOP)란?
객체 지향 프로그래밍(OOP)은 다음 네 가지 핵심 개념을 기반으로 합니다
- 캡슐화(Encapsulation): 데이터를 은닉하고 메서드를 통해 접근하도록 제한합니다.
- 상속(Inheritance): 기존 클래스의 특성과 동작을 다른 클래스에서 재사용 할 수 있습니다.
- 다형성(Polymorphism): 동일한 인터페이스를 통해 서로 다른 동작을 실행할 수 있습니다.
- 추상화(Abstraction): 불필요한 세부사항을 숨기고 핵심 개념에 집중합니다.
2. 클래스와 객체란?
- 클래스(Class): 객체를 생성하기 위한 설계도입니다. 클래스에는 속성(필드)과 동작(메서드)이 정의됩니다.
- 객체(Object): 클래스를 기반으로 생성된 실체로, 메모리에 생성된 데이터 단위입니다.
클래스와 객체의 관계를 간단히 요약하면 다음과 같습니다
- 클래스: 설계도라고 생각하시면 됩니다.
- 객체: 설계도를 기반으로 만들어진 실제 물건으로 표현합니다.
3. Java에서 클래스 정의하기
Java에서 클래스를 정의하는 기본 구조는 다음과 같습니다
public class Person {
// 속성 (필드)
String name;
int age;
// 동작 (메서드)
public void introduce() {
System.out.println("안녕하세요, 제 이름은 " + name + "이고, 나이는 " + age + "살입니다.");
}
}
위 예제에서:
name
과age
는 클래스의 속성을 나타냅니다.introduce()
는 클래스로 생성된 객체가 실행할 동작을 정의한 메서드입니다.
4. 객체 생성 및 사용하기
클래스를 기반으로 객체를 생성하려면 new
키워드를 사용합니다. 다음은 객체를 생성하고 사용하는 방법이니 잘 따라 하시기 바랍니다.
public class Main {
public static void main(String[] args) {
// Person 클래스 기반 객체 생성
Person person = new Person();
// 객체의 속성 설정
person.name = "홍길동";
person.age = 25;
// 객체의 메서드 호출
person.introduce();
}
}
출력 결과:
안녕하세요, 제 이름은 홍길동이고, 나이는 25살입니다.
5. 생성자(Constructor) 사용하기
생성자는 객체가 생성될 때 호출되는 특수한 메서드입니다. 생성자를 사용하면 객체를 생성하면서 초기값을 설정할 수 있습니다.
public class Person {
String name;
int age;
// 생성자 정의
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void introduce() {
System.out.println("안녕하세요, 제 이름은 " + name + "이고, 나이는 " + age + "살입니다.");
}
}
public class Main {
public static void main(String[] args) {
// 생성자를 사용한 객체 생성
Person person = new Person("홍길동", 25);
person.introduce();
}
}
6. 접근 제어자(Access Modifiers)
Java에서는 클래스의 멤버(필드와 메서드)에 접근할 수 있는 범위를 제어하기 위해 접근 제어자를 사용합니다
public
: 모든 클래스에서 접근이 가능합니다.private
: 해당 클래스 내에서만 접근이 가능합니다.protected
: 같은 패키지 또는 상속받은 클래스에서 접근이 가능합니다.- (default): 같은 패키지 내에서 접근이 가능합니다.
예:
public class Person {
private String name;
private int age;
// Getter와 Setter를 사용한 접근
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
7. 객체 지향 프로그래밍의 장점
- 코드 재사용성: 상속과 클래스 구조를 통해 재사용 가능한 코드 작성 합니다.
- 유지보수 용이성: 캡슐화를 통해 코드의 변경이 다른 부분에 영향을 미치지 않습니다.
- 확장성: 다형성과 인터페이스를 활용해 기능 확장이 쉽습니다.
결론
Java의 객체 지향 프로그래밍(OOP) 개념은 프로그램의 구조를 논리적으로 설계하고 효율적으로 개발할 수 있게 합니다. 클래스와 객체를 잘 이해하면 더 복잡하고 강력한 애플리케이션을 개발할 수 있습니다. OOP의 원칙을 꾸준히 연습하며 Java 프로그래밍 실력을 향상시켜 보세요. 다음 블로그는 Java와 C++ 비교: 두 언어의 차이점과 사용 사례에 대해 알아 보겠습니다. 감사합니다.