본문 바로가기
Java/기본 개념 및 클래스

[Java] 22. 객체 지향 패러다임

글: Song hyun 2024. 4. 16.
728x90
반응형

[Java] 22. 객체 지향 패러다임

 

 

1. 객체 지향 패러다임
(1) 객체지향 패러다임(Object-Oriented Paradigm)은 소프트웨어를 설계하고, 구현하는 방법론 중 하나이다.
실세게의 객체를 모델링하여 소프트웨어의 복잡성을 관리하고, 코드의 재사용성을 높이는 데 중점을 둔다.
*이 패러다임의 핵심은, 프로그램을 상호작용하는 객체들의 집합으로 본다는 것이다.
각 객체는 자신의 데이터와 행위를 가지는 독립적인 엔티티로 취급한다.

(2) 엔티티(Entity): 특정 속성과 행동을 가진 독립적인 단위나 객체를 의미한다.



2. 객체 지향 패러다임의 주요 원칙
(1) 캡슐화(Encapsulation): 객체는 데이터(변수)와 그 데이터를 조작하는 함수(메서드)를 하나로 묶는다.
이를 통해 데이터의 추상화를 가능하게 하고, 외부에서의 접근을 제한한다.

(2) 상속(Inheritance): 하나의 클래스가 다른 클래스의 특성을 물려받는 메커니즘이고,
코드의 재사용성을 높이고, 중복을 줄이며, 유지보수를 편하게 한다.

(3) 다형성(Polymorphism): 하나의 메서드/클래스가 다양한 방식으로 동작하는 것을 말한다.
오버라이딩(Overriding)과 오버로딩(Overloading)은 다형성을 구현하는 일반적인 방법이다.

(4) 추상화(Abstraction): 복잡한 현실의 개체를 단순화된 모델로 표현하는 것이다.
핵심적인 개념, 기능에만 집중해 프로그램의 복잡성을 줄인다.


3. 그래서, 객체 지향 프로그래밍이 뭔데?
-> 객체와 객체간에 관계를 형성하고, 상호작용하게끔 코드를 작성하는 것이다!

 

 

아래와 같이 객체와 메서드를 사용해,

객체와 객체간의 관계를 통해 상호작용하게끔 코드를 작성한다고 보면 될 것 같다.

*객체지향 패러다임으로 코드를 작성할 때, 코드의 실행순서를 주의하자!


 

연습 문제 1.

대중교통 탑승 프로그램을 만들어보자.

(1) Scanner 클래스를 통해 값을 입력받고,

(2) 입력받은 값을 통해 버스(100번, 200번)/지하철(1,2호선) 중에 하나를 선택하고

(3) 입력받은 값에 따라 참조변수 bus,subway의 현재 금액, 승객수를 더한 다음

(4) 결과값을 출력하라.

 

 

풀이 과정:

(1) import java.util.Scanner;를 통해 Scanner 라이브러리를 불러온다.

(2) 사용자에게 선택지를 알려주는 스크립트를 출력하고(System.out)

(3) 선택지(버스: 1 / 지하철: 2) 중 하나를 정수형 변수 choie에 입력받는다.

 

[if]

 (4) 사용자가 입력한 수에 따라, 그 중에서 다시 버스의 번호를 고르게 한다. (100/200)

     -입력받은 수를 choiceBus에 초기화하고, 버스의 번호에 따라 다시 안내 스크립트를 출력한다. 

     -Bus/Subway 클래스의 take 메서드를 호출해 요금/승객수를 초기화한다.

     -초기화된 bus/subway 객체의 상태를 볼 수 있게 showInfo를 불러온다.

package basic.ch09;

import java.util.Scanner;

public class GoingToSchool2 {

	// 설계된 클래스를 가지고, 본인이 의도한 대로 실행의 흐름을 만들어보자.
	public static void main(String[] args) {
		// 1. 스캐너를 활용해, 1번을 누르면 버스를 태워서 실행의 흐름 만들기.
		// 2. 스캐너를 활용해, 2번을 누르면 지하철을 태워서 실행의 흐름 만들기.

		Bus bus1 = new Bus(100);
		Bus bus2 = new Bus(200); // 선언만 했음
		Subway subway1 = new Subway(1);
		Subway subway2 = new Subway(2);
		Student s1 = new Student("티모", 100_00);
		Student s2 = new Student("가츠", 200_00);

		System.out.println("등교를 시작합니다!");

		Scanner sc = new Scanner(System.in);
		System.out.println(" 메뉴를 선택하세요.");
		System.out.println(" 1번 버스 / 2번 지하철");

		int choice = sc.nextInt();

		// 버스를 탈 경우
		if (choice == 1) {
			System.out.println("탈 버스를 선택하세요.");
			System.out.println(" 100번 / 200번 ");
			int choiceBus = sc.nextInt();
			if (choiceBus == 100) {
				System.out.println(" 100 번 버스를 고르셨습니다.");
				System.out.println(" 운행을 시작합니다. ");
				System.out.println(" 1500원이 납부되었습니다. ");
				bus1.take(1500);
				System.out.println("-----------");
				bus1.showInfo();
			} else if (choiceBus == 200) {
				System.out.println(" 200 번 버스를 고르셨습니다.");
				System.out.println(" 운행을 시작합니다. ");
				System.out.println(" 1500원이 납부되었습니다. ");
				bus2.take(1500);
				System.out.println("-----------");
				bus2.showInfo();
			}
		}

		// 지하철을 탈 경우
		if (choice == 2) {
			System.out.println("탈 지하철 호선을 선택하세요.");
			System.out.println(" 1호선 / 2호선 ");
			int choiceSubway = sc.nextInt();
			if (choiceSubway == 1) {
				System.out.println(" 1호선을 고르셨습니다.");
				System.out.println(" 운행을 시작합니다. ");
				System.out.println(" 1200원이 납부되었습니다. ");
				subway1.take(1200);
				System.out.println("-----------");
				subway1.showInfo();
				
			} else if (choiceSubway == 2) {
				System.out.println(" 2호선을 고르셨습니다.");
				System.out.println(" 운행을 시작합니다. ");
				System.out.println(" 1200원이 납부되었습니다. ");
				subway2.take(1200);
				System.out.println("-----------");
				subway2.showInfo();
			}
		}

	}
} // end of class
728x90
반응형