객체 지향 프로그래밍 (Object-Oriented Programming, OOP)
자바는 객체 지향 프로그래밍 언어로, 객체 지향 프로그래밍의 특징을 모두 지원하고 있습니다.
자바에서는 클래스를 사용하여 객체를 생성하며, 이러한 객체들 간의 상호작용을 통해 프로그램을 구성합니다.
자바에서는 객체를 생성하기 위한 클래스를 정의하고, 이 클래스의 인스턴스를 생성하여 사용합니다.
클래스는 객체의 속성(변수)과 동작(메서드)을 정의하며, 이러한 클래스를 기반으로 객체를 생성하고 사용합니다.
자바에서는 상속, 다형성, 캡슐화와 같은 객체 지향 프로그래밍의 다양한 개념을 지원합니다.
상속을 사용하여 이미 존재하는 클래스를 확장하고, 다향성을 사용하여 같은 이름의 메서드를 다른 방식으로 구현하는 등의 기능을 제공합니다. 또한, 캡슐화를 사용하여 객체의 상태를 보호하고, 객체 간의 데이터를 안전하게 전달할 수 있습니다.
객체 지향 프로그래밍의 장점
코드 재사용성 : 상속을 통해 기존 클래스의 특성을 이어받아 새로운 클래스를 정의할 수 있으므로, 중복된 코드를 최소화하고 코드의 재사용성을 높일 수 있습니다.
유지보수 용이성 : 클래스와 객체의 관계가 명확하게 정의되어 있어서, 코드를 수정하거나 추가하는 작업이 상대정으로 쉽고 안정적으로 이루어질 수 있습니다.
확장성 : 새로운 클래스를 정의하고 상속을 통해 기존 클래스를 확장할 수 있으므로, 프로그램을 유연하게 확장할 수 있습니다.
가독성과 이해도 : 객체 지향 프로그래밍은 현실 세계의 개념을 바탕으로 코드를 작성하므로, 코드의 가독성과 이해도가 높아집니다. 이는 협업과 유지보수에 매우 유리합니다.
모듈화 : 클래스 단위로 코드를 모듈화 하여 개발할 수 있으므로, 코드의 구조를 알기 쉽고 각 모듈을 독립적으로 개발할 수 있습니다.
클래스의 개념
클래스는 객체 지향 프로그래밍에서 객체를 생성하기 위한 템플릿 또는 설계도입니다. 클래스는 객체의 상태를 나타내는 데이터와 해당 데이터를 처리하는 메서드로 구성됩니다. 클래스는 객체의 특성을 정의하는 변수와 객체의 동작을 구현하는 메서드로 구성됩니다.
예를 들어 '사람'이라는 클래스를 정의한다면, 해당 클래스는 사람의 속성(나이, 이름, 성별 등)을 나타내는 변수와 사람의 동작(걷기, 말하기, 먹기 등)을 나타내는 메서드를 포함할 수 있습니다. 이렇게 정의된 클래스를 기반으로 여러 개의 사람 객체를 생성할 수 있습니다.
상속
기존 클래스의 특성을 이어받아 새로운 클래스를 확장하거나 수정하는 개념입니다.
상속을 통해서 기존 클래스의 멤버 변수와 메서드를 새로운 클래스에서 재사용할 수 있습니다. 이때, 기존 클래스를 부모 클래스 또는 상위 클래스라고 하고, 새롭게 정의되는 클래스는 자식 클래스 또는 하위 클래스라고 합니다. 상속을 통해서 코드의 중복을 줄이고, 유지보수성과 재사용성을 높일 수 있습니다.
다형성
한 객체가 여러 가지 형태를 가질 수 있는 능력을 말합니다.
동일한 메서드를 호출하더라도 다른 객체의 메서드가 실행될 수 있어서 코드의 유연성을 높여줍니다.
다형성은 상속과 인터페이스를 통해 구현됩니다. 상속을 통해 부모 클래스의 메서드를 자식 클래스에서 재정의(오버라이딩)할 수 있고, 인터페이스를 통해 다양한 클래스가 동일한 메서드를 구현할 수 있습니다.
캡슐화
객체의 상태를 나타내는 데이터와 해당 데이터를 처리하는 메서드를 하나의 단위로 묶는 것을 말합니다.
이를 통해 객체의 내부 구현을 외부로부터 감추고, 외부에서는 객체에 접근할 때 제공된 인터페이스를 통해 상호작용할 수 있습니다.
캡슐화는 접근 제어자를 통해 구현됩니다. 자바에서는 public, private, protected와 같은 접근 제어자를 사용하여 멤버 변수와 메서드의 접근 범위를 지정할 수 있습니다. public으로 선언된 멤버는 외부에서 직접 접근할 수 있으며, private로 선언된 멤버는 외부에서 직접 접근할 수 없고, 클래스 내부에서만 접근할 수 있습니다.