JAVA
[Java] 객체 지향 프로그래밍
songsua
2024. 10. 20. 15:16
음악 플레이어
- 속성 : volume, isOn()
- 기능 : on(), off(), volumeup(), volumeDown(), showStatus()
을 가지고 음악 플레이어를 만들어보자
package oop1;
public class MusicPlayer {
int volume = 0;
boolean isOn = false;
//처음에는 볼륨이 꺼쪄있음
void on() {
isOn = true;
System.out.println("Music player is on");
}
void off() {
isOn = false;
//위의 자신의 값을 false로 바꾼다.
System.out.println("Music player is off");
}
void volumeUp() {
volume++;
System.out.println("Music player volume up");
}
void volumeDown() {
volume--;
System.out.println("Music player volume down");
}
void showStatus() {
if (isOn) {
System.out.println("Music player is on, volume:" + volume );
}
else {
System.out.println("Music player is off, volume:" + volume );
}
}
}
Class 안에 속성과 기능을 모두 정의했다.
package oop1;
public class MusicplayesMain {
public static void main(String[] args) {
MusicPlayer player = new MusicPlayer();
//음악플레이어를 켜키
player.on();
//on메서드 사용
player.off();
//off메서드 사용
player.volumeDown();
//volumedown메서드 사용
player.volumeUp();
//volumeup 메서드 사용
player.showStatus();
}
}
캡슐화
MusicPlayer을 보면 하나의 Class 안에 구성에 필요한 속성과 기능이 쌓여잇는거 같아,
이렇게 속성과 기능을 하나로 묶어서 필요한 기능을 메서드를 통해 외부에 제공하는 것을 "캡슐화" 라고 한다.
문제와 풀이 -3
절차 지향 직사각형 프로그램을 객체 지향으로 변경하기
다음은 직사각형의 넓이(Area), 둘레 길이(Perimeter), 정사각형 여부(square)를 구하는 프로그램이다.
절차 지향 프로그래밍 방식으로 되어 있는 코드를 객체 지향 프로그래밍 방식으로 변경해라.
- `Rectangle` 클래스를 만들어라.
- `RectangleOopMain` 에 해당 클래스를 사용하는 `main()` 코드를 만들어라.
절체지향코드
package oop1.oop;
public class ex {
public static void main(String[] args) {
int width = 5;
int height = 8;
int area = calculateArea(width, height);
System.out.println("넓이: " + area);
int perimeter = calculatePerimeter(width, height);
System.out.println("둘레 길이: " + perimeter);
boolean square = isSquare(width, height);
System.out.println("정사각형 여부: " + square);
}
static int calculateArea(int width, int height) {
return width * height;
}
static int calculatePerimeter(int width, int height) {
return 2 * (width + height);
}
static boolean isSquare(int width, int height) {
return width == height;
} }
}
답안:
package oop1.oop;
public class Rectangle {
int width;
int height;
//사각형의 넓이는 밑변 곱하기 높이하고 return해서 다시 적용
int calculateArea() {
return width * height;
}
boolean isSquare() {
//정사각형 여부확인하는 법
return width == height;
//같으면 true, 같지 않으면 false 로 표기 된다
}
int calculatePerimeter() {
return 2 * (width + height);
}
}
package oop1.oop;
public class ex {
public static void main(String[] args) {
Rectangle rect = new Rectangle();
rect.height = 8;
rect.width = 5;
//넓이 얼마인지 호출하는 값
int area = rect.calculateArea();
System.out.println("넓이 값:" + area);
int dul = rect.calculatePerimeter();
System.out.println("둘레의 값:" + dul );
boolean squre = rect.isSquare();
System.out.println("정사각형 여부: " + squre);
}
}
문제 :
- 은행 계좌를 객체로 설계해야 한다.
- Account` 클래스를 만들어라.
int balance` 잔액
deposit(int amount)` : 입금 메서드 입금시 잔액이 증가한다. - withdraw(int amount)` : 출금 메서드 출금시 잔액이 감소한다.
만약 잔액이 부족하면 **잔액 부족**을 출력해야 한다. - AccountMain` 클래스를 만들고 `main()` 메서드를 통해 프로그램을 시작해라. 계좌에 돈을 입금해라.
package oop1.bank;
public class Account {
int balance;
int deposit;
int withdraw;
void deposit(int amount) {
balance += amount;
}
void withdraw(int amount) {
if (balance >= amount) {
balance -= amount;
}
else {
//만약 잔액이 부족하다면 "잔액 부족" 을 출력해야 한다
System.out.println("Insufficient balance");
}
}
}
package oop1.bank;
public class AcoountMain {
public static void main(String[] args) {
Account account = new Account();
//처음에 만원 입금
account.deposit(1000);
account.withdraw(900);
account.withdraw(500);
}
}
Insufficient balance 라고 호출 된다.