약 6분
본문 듣기
읽기 설정
글자 크기
줄 간격
글꼴
9.1. 객체지향 설계 원칙
객체지향 프로그래밍(OOP)의 핵심은 현실 세계의 개념을 프로그램에 도입하여 더 간단하고 직관적인 구조로 개발하는 것입니다. Java 언어는 OOP를 철저히 지원하며, 이를 통해 개발자는 재사용 가능하고, 유지보수하기 쉬운 코드를 작성할 수 있습니다. 객체지향 설계 원칙은 이러한 OOP의 기본 원칙을 제공합니다.
객체지향 설계 원칙 설명
- Class(클래스) : 클래스는 객체를 생성하기 위한 설계도입니다. 특정 객체의 특성과 동작을 정의하며, 실제 객체는 이 클래스를 기반으로 생성됩니다.
- Object(객체) : 객체는 클래스로부터 생성된 인스턴스입니다. 객체는 데이터와 동작을 함께 가집니다.
- Constructor(생성자) : 객체가 생성될 때 호출되는 함수로, 객체의 초기화를 담당합니다.
- Encapsulation(캡슐화) : 객체의 내부 상태를 숨기고 외부에서는 메소드를 통해서만 접근하도록 만드는 개념입니다. 이를 통해 데이터 보호와 코드의 무결성을 유지합니다.
- Inheritance(상속) : 기존 클래스를 기반으로 새로운 클래스를 정의할 수 있는 기능입니다. 상위 클래스의 속성과 메소드를 하위 클래스가 상속받아 사용할 수 있습니다.
- Polymorphism(다형성) : 같은 메소드 이름을 가지고 다양한 형태로 동작할 수 있는 능력입니다. 주로 메소드 오버라이딩과 오버로딩을 통해 구현됩니다.
- Abstract Class(추상 클래스) : 객체를 완전히 생성할 수 없는 클래스입니다. 주로 하위 클래스에서 구현되어야 하는 메소드를 정의합니다.
- Interface(인터페이스) : 클래스가 특정 메소드를 반드시 구현하도록 요구하는 계약입니다. 다중 상속의 문제를 해결합니다.
- Package(패키지) : 관련 클래스들을 그룹화하여 관리하는 방법입니다. Java의 네임스페이스를 제공하여 클래스 충돌을 방지합니다.
- Access Modifier(접근 제어자) : 클래스, 메소드, 변수의 접근 범위를 제어하는 키워드입니다. public, private, protected, default가 있습니다.
객체지향 개념 예제
다음은 간단한 학생(Student) 클래스를 정의하는 예제입니다.
public class Student {
private String name; // 학생 이름
private int age; // 학생 나이
// 생성자
public Student(String name, int age) {
this.name = name;
this.age = age;
}
// getter 메소드
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
위 코드는 Student 클래스를 정의하고, 나이와 이름을 갖는 학생 객체를 생성할 수 있도록 합니다. private 접근 제어자를 사용하여 직접적인 접근을 막고, getter 메소드를 통해서만 외부에서 상태를 확인할 수 있도록 캡슐화를 구현합니다.
실습
Student클래스를 사용하여 여러 학생 객체를 생성하세요.- 생성한 학생 객체의 데이터를 출력하는 메소드를 추가해보세요.
프로젝트
- 학생관리 프로그램 : 위의 객체지향 설계를 기반으로 학생 관리 기능을 포함한 전체 프로그램을 개발합니다.
- MVC 패턴을 적용하여 프로그램의 구조를 깔끔하게 유지합니다. 최종적으로 학생 리스트를 출력하는 기능을 추가합니다.
정리
객체지향 설계 원칙은 유지보수성을 높이고 코드의 재사용성을 증가시키기 위한 중요한 개념입니다. 이 원칙들을 이해하고 실제 프로젝트에 적용하는 것이 필수적입니다. 다음 장에서는 Collection Framework와 Lambda Expression에 대해 다룰 예정입니다. Java의 진정한 힘을 활용한 프로그램을 작성해주세요!
코드
java
public class Student {
private String name; // 학생 이름
private int age; // 학생 나이
// 생성자
public Student(String name, int age) {
this.name = name;
this.age = age;
}
// getter 메소드
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
댓글 0
아직 댓글이 없습니다. 첫 댓글을 남겨보세요.