벌써 블로그시작한지
7일이 지났네요....
꾸준히 해봅시다 화이팅!!!
객체 지향 프로그래밍에 대해 알아보아요.
목차 )
1) 객체지향과 절차지향의 차이
1-1) 객체란?
2) 절차지향 예시
3) 객체지향
4) 객체지향 심화 예제
1) 객체지향과 절차지향의 차이
- 절차지향 :
절차 지향 프로그래밍은 프로그램의 흐름을 순차적으로 따르며 처리하는 방식이다.
즉, "어떻게"를 중심으로 프로그래밍 한다.
{ 순서를 중요시함 ! }
- 객체지향 :
객체 지향 프로그래밍은 실제 세계의 사물이나 사건을 객체로 보고,
이러한 객체들 간의 상호작용을 중심으로 프로그래밍하는 방식이다.
{ 즉, "무엇을" 중심으로 프로그래밍 한다. }
- 둘의 중요한 차이
절차 지향은 데이터와 해당 데이터에 대한 처리 방식이 분리되어 있다.
반면 객체 지향에서는 데이터와 그 데이터에 대한 행동(메서드)이
하나의 '객체' 안에 함께 포함되어 있다.
1-1) 객체란?
속성과 기능으로 이루어진 사물로 생각하자
자동차)
속성: 차량 색상, 현재 속도
기능: 엑셀, 브레이크, 문 열기, 문 닫기
동물)
속성: 색상, 키
기능: 먹는다. 걷는다.
2) 절차지향 예시
클래스
public class MusicPlayer {
int volume;
boolean isOn;
}
메인코드
public class MusicPlayer_1 {
public static void main(String[] args) {
MusicPlayer music = new MusicPlayer();
on(music);
up(music);
up(music);
down(music);
off(music);
}
public static void on(MusicPlayer music) {
music.isOn = true;
System.out.println("플레이어를 시작합니다 ! \n");
}
public static void off (MusicPlayer music) {
music.isOn = false;
System.out.println("음악플레이어를 종료 !\n");
}
public static void up(MusicPlayer music) {
music.volume++;
System.out.println("볼륨을 증가합니다 ");
System.out.println("현재볼륨 : "+music.volume+"\n");
}
public static void down(MusicPlayer music) {
music.volume--;
System.out.println("볼륨을 감소시킵니다 ");
System.out.println("현재볼륨 : "+music.volume+"\n");
}
}
이 처럼 절차지향 방식으로 음악플레이어를 조정하는 프로그램을
만들었습니다.
절차지향의 한계)
데이터와 기능이 분리되어있다는 점 입니다.
MusicPlayer 가 변경된다면 MusicPlayer_1 의 코드도
같이 변경해야한다는 문제가 발생.
( 관리해야할 곳이 2곳)
객체지향을 사용해 이 문제를 해결해봅시다.
3) 객체지향으로 변경
위에 음악플레이어를
기능과 데이터를 묶어서 구현
음악플레이어에 필요한
모든기능 존재
public class MusicPlayer {
int volume;
boolean isOn;
public void on() {
isOn = true;
System.out.println("플레이어를 시작합니다 ! \n");
}
public void off () {
isOn = false;
System.out.println("음악플레이어를 종료 !\n");
}
public void up() {
volume++;
System.out.println("볼륨을 증가합니다 ");
System.out.println("현재볼륨 : "+volume+"\n");
}
public void down() {
volume--;
System.out.println("볼륨을 감소시킵니다 ");
System.out.println("현재볼륨 : "+volume+"\n");
}
}
사용하는 코드를 한번 보자
public static void main(String[] args) {
MusicPlayer music = new MusicPlayer();
music.on();
music.up();
music.up();
music.down();
music.off();
}
온전히 뮤직플레이어 객체만 생성하면
모든 기능을 사용할 수 있게됨 +유지보수 측면에서도 유리함.
뮤직플레이어를 사용하는 입장에서 보면
뮤직플레이어 내부의 속성을
자세히 몰라도 되고
필요기능만 알면 됨.
( 캡슐화 )
`MusicPlayer` 를 보면
음악 플레이어를 구성하기 위한 속성과 기능이
마치 하나의 캡슐에 쌓여있는 것 같다.
이렇게속성과 기능을 하나로 묶어서 필요한 기능을
메서드를 통해 외부에 제공하는 것을 캡슐화라 한다.
4) 객체지향 예제 (심화)
계산기 만들기
Calculator 클래스를 만들어라.
멤버 변수
`int x, y;
메서드
set(x) : x세팅
reset() : x 초기화
`add(y) : 더하기
minus(y) : 빼기
mulitply(y):곱하기
divide(y) : 나누기
(x,y 둘중 하나라도
0이 들어가면 경고문출력)
클래스
public class Calculator {
private int x; //set을 통해서만 접근
int y;
void set(int x ) {
this.x = x;
System.out.println("초기숫자 : "+x);
}
void reset() {
this.x = 0;
System.out.println("@@ 리셋! @@");
}
void add(int y) {
System.out.print(x+" + "+y+" = ");
x += y;
System.out.println(x);
}
void minus(int y) {
System.out.print(x+" - "+y+" = ");
x -= y;
System.out.println(x);
}
void mulitply(int y) {
System.out.print(x+" * "+y+" = ");
x *= y;
System.out.println(x);
}
void divide(int y) {
if(!(x==0 || y == 0)) {
System.out.print(x+" / "+y+" = ");
x /= y;
System.out.printf("%.3f \n",x);
}
else {
System.out.println("0은 나눌 수 없어요");
}
}
}
메인 코드(사용 코드)
public static void main(String[] args) {
Calculator cal = new Calculator();
cal.set(10); //숫자 세팅
cal.add(5);
cal.minus(3);
cal.mulitply(3);
cal.divide(0);
//0은 나눌수없으므로 연산실행 x
// 계산 하지않음
cal.add(3);
cal.reset(); //초기숫자 초기화
cal.add(3);
}
출력
초기숫자 : 10
10 + 5 = 15
15 - 3 = 12
12 * 3 = 36
0은 나눌 수 없어요
36 + 3 = 39
@@ 리셋! @@
0 + 3 = 3
'Java공부(코딩)' 카테고리의 다른 글
코딩초보의 자바(Java)공부 9일차 { 패키지 } (0) | 2024.12.14 |
---|---|
코딩초보의 자바(Java)공부 8일차 { 생성자 } (2) | 2024.12.13 |
코딩초보의 Java(자바)공부 6일차-2 { 기본형과 참조형 } (0) | 2024.12.12 |
코딩 초보의 Java(자바)공부 6일차 -클래스와 데이터- (3) | 2024.12.11 |
코딩초보의 Java(자바) 공부 5일차 { 메서드(Method) } (4) | 2024.12.11 |