Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- SQLD
- 스파르타코딩클럽
- 깃허브
- 자바
- 이클립스
- ChatGPT
- java
- Spring Security
- error
- spring
- 티스토리챌린지
- AJAX
- HTML
- github
- Firebase
- 기업설명회
- vscode
- bootstrap
- CSS
- 코딩
- restapi
- 김영한
- jQuery
- 오블완
- 웹개발
- JavaScript
- SQL
- myBatis
- 배포
- Eclipse
Archives
- Today
- Total
푸들푸들
[JAVA] 절차 지향, 객체 지향 프로그래밍 본문
- 절차 지향 프로그래밍
- 실행 순서를 중요시. "어떻게" 중심
- 데이터와 해당 테이터에 대한 처리 방식 분리
- 객체 지향 프로그래밍
- 객체들 간의 상호작용 중심. "무엇을" 중심
- 데이터와 그 데이터에 대한 행동(메서드)이 하나의 객체 안에 포
- 대치되는 개념X
예제
--> 절차 지향
public class MusicPlayerMain1 {
public static void main(String[] args) {
int volume = 0;
boolean isOn = false;
// 음악 플레이어 켜기
isOn = true;
System.out.println("음악 플레이어를 시작합니다");
// 볼륨 증가
volume++;
System.out.println("음악 플레이어 볼륨: "+ volume);
// 볼륨 증가
volume++;
System.out.println("음악 플레이어 볼륨: "+ volume);
// 볼륨 감소
volume--;
System.out.println("음악 플레이어 볼륨: "+ volume);
// 음악 플레이어 상태
System.out.println("음악 플레이어 상태 확인");
if(isOn){
System.out.println("음악 플레이어 ON, 볼륨: " + volume);
} else {
System.out.println("음악 플레이어 OFF");
}
// 음악 플레이어 끄기
isOn = false;
System.out.println("음악 플레이어를 종료합니다");
}
}
--> 절차 지향 2 - 데이터 묶음
public class MusicPlayerData {
int volume = 0;
boolean isOn = false;
}
volum -> data.volume
--> 절차 지향 3 - 메서드 추출
public class MusicPlayerMain2 {
public static void main(String[] args) {
MusicPlayerData data = new MusicPlayerData();
//음악 플레이어 켜기
on(data);
//볼륨 증가
volumeUp(data);
//볼륨 증가
volumeUp(data);
//볼륨 감소
volumeDown(data);
//음악 플레이어 상태
showStatus(data);
//음악 플레이어 끄기
off(data);
}
static void on(MusicPlayerData data) {
data.isOn = true;
System.out.println("음악 플레이어를 시작합니다");
}
static void off(MusicPlayerData data) {
data.isOn = false;
System.out.println("음악 플레이어를 종료합니다");
}
static void volumeUp(MusicPlayerData data) {
data.volume++;
System.out.println("음악 플레이어 볼륨:" + data.volume);
}
static void volumeDown(MusicPlayerData data) {
data.volume--;
System.out.println("음악 플레이어 볼륨:" + data.volume);
}
static void showStatus(MusicPlayerData data) {
System.out.println("음악 플레이어 상태 확인");
if (data.isOn) {
System.out.println("음악 플레이어 ON, 볼륨:" + data.volume);
}
else {
System.out.println("음악 플레이어 OFF");
}
}
}
- 각 기능이 모듈화 됨 = 중복 제거, 유지보수 용이
- but, 데이터와 기능이 분리되어있음 -> 데이터를 수정하면 기능도 따로 수정해야함
-> 클래스
객체 지향 언어(자바..) - 클래스 내부에 속성(데이터)과 기능(메서드)을 함께 포함할 수 O
클래스 내부에 멤버 변수 뿐만 아니라 메서드도 함께 포함할 수 O
public class ValueObject {
int value;
void add() {
value++;
System.out.println("숫자 증가 value=" + value);
}
}
- add() 메서드에 static XX: 메서드는 객체를 생성해야 호출 가능. static이 붙으면 객체를 생성하지 않고도 메서드 호출 가능
public class ValueObjectMain {
public static void main(String[] args) {
ValueObject valueObject = new ValueObject(); // 인스턴스 생성
valueObject.add();
valueObject.add();
valueObject.add();
System.out.println("최종 숫자=" + valueObject.value);
}
}
예제
객체 지향 음악 플레이어
public class MusicPlayer {
int volume = 0;
boolean isOn = false;
void on() {
isOn = true;
System.out.println("음악 플레이어를 시작합니다");
}
void off() {
isOn = false;
System.out.println("음악 플레이어를 종료합니다");
}
void volumeUp() {
volume++;
System.out.println("음악 플레이어 볼륨:" + volume);
}
void volumeDown() {
volume--;
System.out.println("음악 플레이어 볼륨:" + volume);
}
void showStatus() {
System.out.println("음악 플레이어 상태 확인");
if (isOn) {
System.out.println("음악 플레이어 ON, 볼륨:" + volume);
}
else {
System.out.println("음악 플레이어 OFF");
}
}
}
- 캡슐화: 속성과 기능을 하나로 묶어서 필요한 기능을 메서드를 통해 외부에 제공하는 것
->
public class MusicPlayerMain4 {
public static void main(String[] args) {
MusicPlayer player = new MusicPlayer();
//음악 플레이어 켜기
player.on();
//볼륨 증가
player.volumeUp();
//볼륨 증가
player.volumeUp();
//볼륨 감소
player.volumeDown();
//음악 플레이어 상태
player.showStatus();
//음악 플레이어 끄기
player.off();
}
}
예제1
public class RectangleProceduralMain {
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;
}
}
= 절차 지향 코드
-> 답: 객체 지향 코드
public class Rectangle {
int width;
int height;
int calculateArea() {
return width * height;
}
int calculatePerimeter() {
return 2 * (width + height);
}
boolean isSquare() {
return this.width == this.height;
}
}
public class RectangleOopMain {
public static void main(String[] args) {
Rectangle rectangle = new Rectangle();
rectangle.width = 5;
rectangle.height = 8;
int area = rectangle.calculateArea();
System.out.println("넓이: " + area);
int perimeter = rectangle.calculatePerimeter();
System.out.println("둘레 길이: " + perimeter);
boolean square = rectangle.isSquare();
System.out.println("정사각형 여부: " + square);
}
}
예제2
-> 답
class Account {
int balance; // 잔액
void deposit(int amount) {
balance += amount;
}
void withdraw(int amount) {
if (balance >= amount) {
balance -= amount;
} else {
System.out.println("잔액 부족");
}
}
}
public class AccountMain {
public static void main(String[] args) {
Account account = new Account();
account.deposit(10000);
account.withdraw(9000);
account.withdraw(2000);
System.out.println("잔고: " + account.balance);
}
}
- 결과
'SELF-STUDY > JAVA 김영한' 카테고리의 다른 글
[JAVA] 패키지 (0) | 2025.04.04 |
---|---|
[JAVA] 생성자 (0) | 2025.04.03 |
[JAVA] 변수와 초기화 (1) | 2025.03.25 |
[JAVA] 기본형, 참조형 (0) | 2025.03.25 |
[JAVA] 클래스, 객체 (0) | 2025.03.20 |