상세 컨텐츠

본문 제목

[자바 CS지식] 자바의 객체지향 프로그래밍 특징

JAVA

by 소란한소란 2024. 2. 12. 16:03

본문

728x90

 

자바는 객체지향 프로그래밍(OOP) 언어로서, 객체지향의 핵심 특징들을 제공합니다. 여기서 자바의 주요한 객체지향 특징을 4가지 설명하겠습니다.


 

1. 캡슐화 (Encapsulation)

캡슐화는 데이터와 그 데이터를 처리하는 메서드를 하나로 묶는 것을 의미합니다. 자바에서는 클래스를 통해 캡슐화를 구현할 수 있습니다. 클래스 내부의 멤버 변수(데이터)는 private로 선언하여 외부에서 직접 접근하지 못하도록 하고, 메서드를 통해 간접적으로 접근하도록 하는 것이 일반적입니다. 이로써 데이터의 은폐와 보호가 가능해지며 객체의 내부 구현을 숨기고 외부에는 필요한 기능만을 노출시킴으로써 모듈화와 유지보수성을 향상시킵니다.

 

예제코드로 이렇게 구성됩니다.

public class Person {
    private String name;
    private int age;
    private String address;

    // 생성자
    public Person(String name, int age, String address) {
        this.name = name;
        this.age = age;
        this.address = address;
    }

    // Getter 메서드
    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public String getAddress() {
        return address;
    }

    // Setter 메서드
    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        if (age > 0) {  // 나이는 음수가 될 수 없음
            this.age = age;
        } else {
            System.out.println("나이는 음수가 될 수 없습니다.");
        }
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

public class Main {
    public static void main(String[] args) {
        // Person 클래스의 객체 생성
        Person person = new Person("홍길동", 30, "서울시 강남구");

        // Getter를 사용하여 정보 출력
        System.out.println("이름: " + person.getName());
        System.out.println("나이: " + person.getAge());
        System.out.println("주소: " + person.getAddress());

        // Setter를 사용하여 정보 수정
        person.setAge(25);  // 유효한 나이로 수정
        person.setAddress("서울시 강서구");  // 주소 수정

        // 수정된 정보 출력
        System.out.println("\n수정된 정보:");
        System.out.println("이름: " + person.getName());
        System.out.println("나이: " + person.getAge());
        System.out.println("주소: " + person.getAddress());
    }
}

 


 

2. 상속 (Inheritance)

상속은 이미 존재하는 클래스를 기반으로 새로운 클래스를 만드는 것을 말합니다. 이를 통해 기존의 클래스에서 정의된 속성과 메서드를 재사용할 수 있습니다. 자바에서는 extends 키워드를 사용하여 상속을 구현합니다. 상속은 코드의 재사용성을 높이고, 계층 구조를 통해 구조적으로 프로그램을 설계할 수 있게 합니다.

 

예제코드로 이렇게 구성됩니다.

 

class Animal {
    void eat() {
        System.out.println("Animal is eating");
    }
}

class Dog extends Animal {
    void bark() {
        System.out.println("Dog is barking");
    }
}

 

위의 예시에서 Dog 클래스는 Animal 클래스를 상속받아 eat 메서드를 재사용하고 bark 메서드를 추가로 정의하고 있습니다.

 


 

3. 다형성 (Polymorphism)

다형성은 하나의 타입이 여러 가지 형태로 나타날 수 있는 능력을 가리킵니다. 자바에서 다형성은 주로 메서드 오버로딩메서드 오버라이딩통해 구현됩니다. 메서드 오버로딩은 같은 이름의 메서드를 여러 개 정의하는 것이고, 메서드 오버라이딩은 부모 클래스에서 정의된 메서드를 자식 클래스에서 재정의하는 것입니다.

 

예제코드로 이렇게 구성됩니다.

 

class Animal {
    void makeSound() {
        System.out.println("Some generic sound");
    }
}

class Dog extends Animal {
    @Override
    void makeSound() {
        System.out.println("Woof! Woof!");
    }
}

class Cat extends Animal {
    @Override
    void makeSound() {
        System.out.println("Meow!");
    }
}

 

위의 예시에서 makeSound 메서드가 다형성을 나타내고 있습니다. Animal 타입의 변수Dog 또는 Cat 객체를 대입하면, 해당 객체의 타입에 따라 다른 makeSound 메서드가 호출됩니다.

 


 

4. 추상화 (Abstraction)

추상화는 복잡한 시스템에서 핵심적인 개념 또는 기능을 간추려내어 모델링하는 것을 의미합니다. 자바에서는 추상 클래스와 인터페이스를 통해 추상화를 구현할 수 있습니다. 추상 클래스는 일부 메서드가 구현되지 않은 상태로 선언되며, 인터페이스는 모든 메서드가 구현되지 않은 상태로 정의됩니다. 이를 통해 추상화는 프로그램의 복잡성을 줄이고 핵심 기능에 집중할 수 있게 합니다.

 

예제코드로 이렇게 구성됩니다.

 

abstract class Shape {
    abstract void draw();
}

class Circle extends Shape {
    @Override
    void draw() {
        System.out.println("Drawing a circle");
    }
}

class Square extends Shape {
    @Override
    void draw() {
        System.out.println("Drawing a square");
    }
}

 

위의 예시에서 Shape 클래스는 추상 클래스로, draw 메서드가 추상 메서드로 선언되어 있습니다. 이를 상속받는 CircleSquare 클래스에서 각각의 도형을 그리는 방식을 구현하고 있습니다.

 


 

자바의 객체지향 특징들은 프로그램을 모듈화하고 유지보수하기 쉽게 만들어주며, 객체지향 설계 원칙을 따라 프로그래밍하는데 큰 도움을 줍니다.

 

728x90

관련글 더보기