안녕하세요! 이번에는 자바에서 객체 지향 프로그래밍의 핵심 개념과 활용에 대해 알아보겠습니다. 객체 지향 프로그래밍은 프로그램을 독립적인 객체들의 집합으로 모델링하는 프로그래밍 패러다임입니다. 이번 글에서는 객체 지향 프로그래밍의 개념, 클래스와 객체, 상속, 다형성, 추상 클래스와 인터페이스, 그리고 패키지와 접근 제어자에 대해 알아보겠습니다.
7.1 객체 지향 프로그래밍의 개념
객체 지향 프로그래밍은 현실 세계를 모델링하기 위해 객체라는 개념을 사용하는 프로그래밍 패러다임입니다. 객체는 상태(state)와 행위(behavior)를 가지고 있으며, 이러한 객체들이 상호작용하면서 프로그램이 동작합니다. 객체 지향 프로그래밍은 코드의 재사용성과 유지 보수성을 향상시키는 장점을 가지고 있습니다.
7.2 클래스와 객체
클래스는 객체를 생성하기 위한 설계도입니다. 클래스는 객체의 속성을 나타내는 필드와 객체의 동작을 정의하는 메서드로 구성됩니다. 객체는 클래스를 기반으로 생성된 실체로, 클래스의 인스턴스라고도 합니다. 객체는 클래스의 특정한 상태를 가지며, 메서드를 호출하여 원하는 동작을 수행할 수 있습니다.
아래는 클래스와 객체의 예제 코드입니다.
// 클래스 정의
public class Circle {
// 필드
private double radius;
// 메서드
public void setRadius(double radius) {
this.radius = radius;
}
public double calculateArea() {
return Math.PI * radius * radius;
}
}
// 객체 생성 및 사용
Circle myCircle = new Circle();
myCircle.setRadius(5.0);
double area = myCircle.calculateArea();
System.out.println("원의 넓이: " + area);
7.3 상속
상속은 클래스가 다른 클래스의 속성과 메서드를 이어받는 것을 의미합니다. 상속을 통해 클래스 간의 계층 구조를 형성하고, 공통된 코드를 재사용할 수 있습니다. 상속은 기존 클래스를 확장하여 새로운 클래스를 만들 수 있으며, 부 모 클래스의 기능을 자식 클래스에서 확장하거나 변경할 수 있습니다.
아래는 상속의 예제 코드입니다.
// 부모 클래스
public class Animal {
public void sound() {
System.out.println("동물이 소리를 낸다.");
}
}
// 자식 클래스
public class Cat extends Animal {
public void sound() {
System.out.println("야옹");
}
}
// 객체 생성 및 사용
Animal animal = new Animal();
animal.sound(); // 동물이 소리를 낸다.
Cat cat = new Cat();
cat.sound(); // 야옹
7.4 다형성
다형성은 동일한 이름의 메서드나 연산자가 다양한 형태로 동작할 수 있는 성질을 의미합니다. 다형성을 통해 서로 다른 클래스의 객체를 동일한 타입으로 처리할 수 있으며, 유연하고 확장 가능한 코드를 작성할 수 있습니다.
아래는 다형성의 예제 코드입니다.
// 부모 클래스
public class Shape {
public void draw() {
System.out.println("도형을 그립니다.");
}
}
// 자식 클래스
public class Circle extends Shape {
public void draw() {
System.out.println("원을 그립니다.");
}
}
// 자식 클래스
public class Rectangle extends Shape {
public void draw() {
System.out.println("사각형을 그립니다.");
}
}
// 객체 생성 및 사용
Shape shape1 = new Circle();
shape1.draw(); // 원을 그립니다.
Shape shape2 = new Rectangle();
shape2.draw(); // 사각형을 그립니다.
7.5 추상 클래스와 인터페이스
추상 클래스는 객체를 직접 생성할 수 없는 클래스로, 다른 클래스들의 공통된 특성을 추상화하여 정의합니다. 인터페이스는 추상 메서드와 상수로만 구성된 클래스로, 클래스들 간의 통신을 위한 규약을 제공합니다. 추상 클래스와 인터페이스를 활용하면 다형성을 더욱 확장하고 코드의 유연성을 높일 수 있습니다.
// 추상 클래스
public abstract class Animal {
public abstract void sound();
}
// 인터페이스
public interface Drawable {
void draw();
}
// 클래스가 추상 클래스를 상속하고 인터페이스를 구현하는 예제
public class Circle extends Animal implements Drawable {
public void sound() {
System.out.println("원이 소리를 낸다.");
}
public void draw() {
System.out.println("원을 그린다.");
}
}
// 객체 생성 및 사용
Circle circle = new Circle();
circle.sound(); // 원이 소리를 낸다.
circle.draw(); // 원을 그린다.
7.6 패키지와 접근 제어자
패키지는 관련된 클래스와 인터페이스를 그룹화하여 구조화하는 방법입니다. 패키지를 사용하면 클래스의 이름 충돌을 방지하고, 코드의 가독성과 유지 보수성을 높일 수 있습니다. 접근 제어자는 클래스, 필드, 메서드, 생성자 등의 접근 권한을 지정하는 키워드입니다. 접근 제어자를 사용하여 캡슐화를 구현하고 외부로부터의 접근을 제한할 수 있습니다.
아래는 패키지와 접근 제어자의 예제 코드입니다.
// 패키지 선언
package com.example.myproject;
// 접근 제어자를 사용한 클래스와 메서드 정의
public class MyClass {
private int myPrivateField;
public String myPublicField;
private void myPrivateMethod() {
// 코드 작성
}
public void myPublicMethod() {
// 코드 작성
}
}
// 다른 패키지에서의 사용 예제
package com.example.otherpackage;
import com.example.myproject.MyClass;
public class OtherClass {
public static void main(String[] args) {
MyClass myObj = new MyClass();
myObj.myPublicField = "Hello";
myObj.myPublicMethod();
}
}
이상으로 객체 지향 프로그래밍의 핵심 개념과 활용에 대해 알아보았습니다. 클래스와 객체, 상속, 다형성, 추상 클래스와 인터페이스, 그리고 패키지와 접근 제어자는 자바에서 객체 지향 프로그래밍을 구현하는 데 중요한 요소입니다. 이러한 개념을 활용하여 유연하고 확장 가능한 프로그램을 작성해 보세요! 감사합니다!
'JAVA' 카테고리의 다른 글
JAVA | 9. 입출력 (0) | 2023.06.10 |
---|---|
JAVA | 8. 예외 처리 (0) | 2023.06.09 |
JAVA | 6. 메서드 (0) | 2023.06.09 |
JAVA | 5. 배열 (0) | 2023.06.06 |
JAVA | 4. 조건문과 반복문 (0) | 2023.06.06 |
댓글