본문 바로가기
# Coding/Java

자바 객체 지향 프로그래밍

by hxodoo.cookie 2023. 9. 14.

자바는 현대 소프트웨어 개발의 핵심 언어 중 하나로, 객체지향 프로그래밍(OOP)의 개념과 원칙을 중심으로 구축되었습니다. 이 글에서는 자바의 객체지향 프로그래밍에 대한 핵심 개념과 그것들을 실제로 활용하는 방법에 대해 자세히 살펴보겠습니다.

 

 

객체지향 프로그래밍의 개념

 

1. 클래스와 객체

  • 클래스(Class): 클래스는 객체를 생성하기 위한 템플릿으로, 속성(멤버 변수)과 메서드(멤버 함수)를 정의합니다. 예를 들어, 'Person' 클래스는 사람의 속성과 행동을 정의할 수 있습니다.
  • 객체(Object): 객체는 클래스를 기반으로 실제로 생성된 인스턴스를 말합니다. 'Person' 클래스를 기반으로 생성된 실제 사람 객체는 각각 다른 속성과 행동을 가질 수 있습니다.

 

2. 상속

  • 상속(Inheritance): 상속은 기존 클래스에서 속성과 메서드를 물려받아 새로운 클래스를 정의하는 개념입니다. 이를 통해 코드 재사용과 확장이 가능해집니다.

 

3. 다형성

  • 다형성(Polymorphism): 다형성은 하나의 인터페이스나 메서드가 다양한 형태로 동작할 수 있는 능력을 말합니다. 자바에서는 다형성을 인터페이스와 메서드 오버라이딩을 통해 구현합니다.

 

4. 캡슐화

  • 캡슐화(Encapsulation): 캡슐화는 데이터와 그 데이터를 다루는 메서드를 하나의 단위로 묶는 개념입니다. 이를 통해 데이터의 접근을 제어하고 보안을 강화할 수 있습니다.

 

 


자바에서 객체지향 프로그래밍 활용

 

객체지향 프로그래밍 활용: 클래스 정의와 객체 생성
자바에서 클래스를 정의하고 객체를 생성하는 방법은 간단합니다. 다음은 'Person' 클래스를 정의하고 객체를 생성하는 예제입니다.

- 클래스 정의 : Person(사람) 클래스에 name(이름), age(나이) 속성 정의 / introduce(소개) 수행 메서드 정의

- 객체 생성 : Person(사람) 클래스를 기반으로 name(이름)은 '홍길동', age(나이)는 '30'인 객체 생성 / 해당 객체는 introduce(소개) 행동을 수행

 

 

class Person {
    String name;
    int age;

    void introduce() {
        System.out.println("이름: " + name);
        System.out.println("나이: " + age);
    }
}

public class Main {
    public static void main(String[] args) {
        Person person1 = new Person();
        person1.name = "홍길동";
        person1.age = 30;
        person1.introduce();
    }
}

 

 

 

객체지향 프로그래밍 활용: 상속
상속을 사용하면 기존 클래스의 속성과 메서드를 재사용하고 확장할 수 있습니다. 다음은 'Student' 클래스가 'Person' 클래스를 상속받는 예제입니다.

- 클래스 상속: Person(사람) 클래스를 상속받은 Student(학생) 클래스는 name, age, introduce() 등 부모 클래스에 정의된 속성과 메서드까지 호출하여 사용 가능

 

 

class Student extends Person {
    String school;

    void study() {
        System.out.println(name + "은(는) " + school + "에서 공부합니다.");
    }
}

 

 

 

객체지향 프로그래밍 활용: 다형성 구현
다형성을 이용하여 여러 클래스가 같은 인터페이스를 구현하도록 할 수 있습니다. 예를 들어, 'Shape' 인터페이스를 구현한 다양한 도형 클래스를 만들 수 있습니다.

- 다형성 구현: Shape를 인터페이스로 작성하여 calculateArea 메서드 내용을 정의하지 않고, Shape를 구현하는 Circle, Rectangle 두 클래스에서 calculateArea 메서드를 각각의 특성에 맞는 계산식으로 정의(Override)하여 사용

 

 

interface Shape {
    double calculateArea();
}

class Circle implements Shape {
    double radius;

    @Override
    public double calculateArea() {
        return Math.PI * radius * radius;
    }
}

class Rectangle implements Shape {
    double width;
    double height;

    @Override
    public double calculateArea() {
        return width * height;
    }
}

 

 

 

객체지향 프로그래밍 활용: 캡슐화
캡슐화를 통해 데이터를 보호하고 외부에서의 무단 접근을 막을  있습니다예를 들어, 'BankAccount' 클래스에서 잔액 정보를 캡슐화하여 구현할 수 있습니다.

- 캡슐화: BankAccount 클래스에서 balance(잔액 정보) 속성의 접근제한자를 private로 정의하여 BankAccount 클래스 내부에서만 해당 속성에 접근 가능

 

 

class BankAccount {
    private double balance;

    public void deposit(double amount) {
        if (amount > 0) {
            balance += amount;
        }
    }

    public void withdraw(double amount) {
        if (amount > 0 && amount <= balance) {
            balance -= amount;
        }
    }

    public double getBalance() {
        return balance;
    }
}

 

 

 

자바 클래스, 상속, 다형성 및 캡슐화와 같은 핵심 개념을 활용하여 코드를 구조화하고 유지 보수 가능한 소프트웨어를 개발할 수 있습니다.

 

 

클래스 제작, 객체 생성, 상속의 개념은 다음 글에서 더 자세하게 알아보겠습니다.

'# Coding > Java' 카테고리의 다른 글

자바 메서드  (0) 2023.09.20
자바 클래스 제작, 객체 생성  (0) 2023.09.19
자바 조건문 반복문  (0) 2023.09.13
자바 배열, 배열과 메모리  (0) 2023.09.12
자바 특수 문자, 서식 문자, 연산자  (1) 2023.09.11