객체지향언어 Java

한민욱·2024년 5월 31일

객체지향 언어란?

객체 지향 프로그래밍(OOP)을 지원하는 프로그래밍 언어를 말합니다. 이러한 언어들은 객체, 클래스, 상속, 다형성 등과 같은 객체 지향 개념을 사용하여 소프트웨어를 설계하고 구현할 수 있도록 지원합니다. 객체 지향 언어의 주요 목표는 코드의 재사용성, 유지 보수성, 확장성 등을 향상시키는 것입니다.

그럼 객체는 뭔데?

객체(Object)는 객체 지향 프로그래밍(OOP)의 핵심 개념으로, 현실 세계의 사물이나 개념을 소프트웨어 내에서 표현한 것입니다. 객체는 데이터와 그 데이터를 처리하는 방법(함수 또는 메서드)을 하나의 단위로 묶은 구조체입니다.

객체의 구성 요소

속성 (Attributes) 또는 필드 (Fields)

객체가 가지는 데이터나 상태를 나타냅니다. 속성은 변수 형태로 존재하며, 예를 들어, 자동차 객체의 속성으로는 색상, 모델, 속도 등이 있을 수 있습니다.

메서드 (Methods)

객체가 수행할 수 있는 동작이나 행동을 정의합니다. 메서드는 함수 형태로 존재하며, 예를 들어, 자동차 객체의 메서드로는 가속(), 감속(), 멈춤() 등이 있을 수 있습니다.

객체의 특징

1. 캡슐화 (Encapsulation)

객체는 데이터를 보호하기 위해 속성과 메서드를 하나의 단위로 묶고, 외부에서 직접 접근하지 못하도록 제어합니다. 이를 통해 데이터 무결성을 유지하고, 객체 내부 구현을 숨길 수 있습니다.

2. 상속 (Inheritance)

클래스는 다른 클래스의 속성과 메서드를 상속받아 재사용할 수 있습니다. 상속을 통해 코드의 중복을 줄이고, 계층적인 구조를 만들 수 있습니다.

3. 다형성 (Polymorphism)

동일한 메서드 이름이 다양한 형태로 동작할 수 있도록 합니다. 다형성은 메서드 오버로딩과 오버라이딩을 통해 구현됩니다.

4. 추상화 (Abstraction)

객체의 복잡한 내부 구현을 숨기고, 외부에서 필요한 기능만을 제공하여 단순하게 사용할 수 있도록 합니다.

그럼 클래스는 뭔데?

클래스(Class)는 객체 지향 프로그래밍에서 객체를 생성하기 위한 청사진 또는 설계도입니다. 클래스는 객체의 속성과 동작을 정의하며, 이를 바탕으로 객체를 생성하고 조작할 수 있습니다. 클래스는 객체 지향 프로그래밍의 기본 단위로, 코드의 재사용성과 구조화를 돕습니다.

// 클래스 정의
public class Car {
    // 속성 정의
    String color;
    String model;
    int speed;

    // 생성자 정의
    public Car(String color, String model) {
        this.color = color;
        this.model = model;
        this.speed = 0; // 초기 속도는 0으로 설정
    }

    // 메서드 정의
    public void accelerate() {
        speed += 10; // 속도를 10 증가
    }

    public void brake() {
        speed -= 10; // 속도를 10 감소
    }

    public void displayInfo() {
        System.out.println("Color: " + color);
        System.out.println("Model: " + model);
        System.out.println("Speed: " + speed);
    }
}

// 객체 생성 및 사용
public class Main {
    public static void main(String[] args) {
        // Car 클래스의 객체 생성
        Car myCar = new Car("Red", "Toyota");
        
        // 객체의 메서드 호출
        myCar.accelerate();
        myCar.displayInfo(); // Color: Red, Model: Toyota, Speed: 10
        
        myCar.brake();
        myCar.displayInfo(); // Color: Red, Model: Toyota, Speed: 0
    }
}

클래스의 특징

1. 캡슐화 (Encapsulation)

클래스는 데이터(속성)와 동작(메서드)을 하나의 단위로 묶고, 외부로부터 데이터를 보호합니다. 접근 제한자를 사용하여 속성과 메서드에 대한 접근 권한을 제어할 수 있습니다.

public class Person {
    // private 접근 제어자를 사용하여 데이터 은닉
    private String name;
    private int age;

    // public 메서드를 통해 접근 허용
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if (age > 0) { // 유효성 검사를 통해 무결성 유지
            this.age = age;
        }
    }
}

public class Main {
    public static void main(String[] args) {
        Person person = new Person();
        person.setName("John");
        person.setAge(30);

        System.out.println("Name: " + person.getName());
        System.out.println("Age: " + person.getAge());
    }
}

2. 상속 (Inheritance)

클래스는 다른 클래스의 속성과 메서드를 상속받아 재사용할 수 있습니다. 이를 통해 코드의 중복을 줄이고, 계층적인 구조를 만들 수 있습니다.

// 상위 클래스
public class Animal {
    protected String name;

    public void eat() {
        System.out.println("This animal eats.");
    }
}

// 하위 클래스
public class Dog extends Animal {
    public void bark() {
        System.out.println("The dog barks.");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.name = "Buddy";
        dog.eat(); // 상위 클래스의 메서드 호출
        dog.bark(); // 하위 클래스의 메서드 호출
    }
}

3. 다형성 (Polymorphism)

동일한 메서드 이름이 다양한 클래스에서 다양한 형태로 동작할 수 있도록 합니다. 메서드 오버로딩(같은 이름의 메서드를 여러 개 정의)과 오버라이딩(상위 클래스의 메서드를 하위 클래스에서 재정의)을 통해 구현됩니다.

💕💕💕 이건 다음 글에서 다룰 예정 💕💕💕

4. 추상화 (Abstraction)

클래스는 복잡한 내부 구현을 숨기고, 필요한 기능만을 외부에 제공하여 단순하게 사용할 수 있도록 합니다. 추상 클래스와 인터페이스를 통해 구현될 수 있습니다.

💕💕💕 이건 다음 글에서 다룰 예정 💕💕💕

profile
나날이 성장하고 싶은 백엔드 개발자

0개의 댓글