1. 절차 지향 프로그래밍
[코드1]
package oop1;
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);
//음악 플레이어 상태
System.out.println("음악 플레이어 상태 확인");
if(isOn){
System.out.println("음악 플레이어 On, 볼륨: "+ volume);
} else{
System.out.println("음악 플레이어 Off, 볼륨: ");
}
//음악 플레이어 끄기
isOn = false;
System.out.println("음악 플레이어를 종료합니다.");
}
}
→ 출력:

[코드2] 각각의 기능을 모두 메서드화
package oop1;
public class MusicPlayerData {
int volume = 0;
boolean isOn = false;
}
package oop1;
public class MusicPlayerMain2 {
public static void main(String[] args) {
MusicPlayerData data = new MusicPlayerData();
// 음악 플레이어 켜기
on(data);
//볼륨 증가
volumeUp(data);
//볼륨 감소
volumeDown(data);
//음악 플레이어 상태
showStatus(data);
//음악 플레이어 끄기
off(data);
}
static void off(MusicPlayerData data) {
data.isOn = false;
System.out.println("음악 플레이어를 종료합니다.");
}
static void on(MusicPlayerData data) {
data.isOn = true;
System.out.println("음악 플레이어를 시작합니다.");
}
static void volumeDown(MusicPlayerData data){
data.volume--;
System.out.println("음악 플레이어 볼륨:" + data.volume);
}
static void volumeUp(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, 볼륨: ");
}
}
}
모듈화 장점
- 로직 중복 제거
- 메서드 내부만 변경하면 되기 때문에 변경 영향 범위 감소
- 메서드 이름 추가로 코드 이해를 쉽게한다
모듈화 단점
- 데이터(MusicPlayerData)와 기능(MusicPlayerMain2)이 따로 분리되어 있다
2. 클래스와 메서드
[코드1]
package oop1;
public class ValueData {
int value;
}
package oop1;
public class ValueDataMain {
public static void main(String[] args) {
ValueData valueData = new ValueData();
add(valueData);
add(valueData);
add(valueData);
System.out.println("최종 숫자 = "+ valueData.value);
}
static void add(ValueData valueData){
valueData.value++;
System.out.println("숫자 증가 value= "+ valueData.value);
}
}
= 데이터인 value와 value의 값을 증가시키는 기능인 add()메서드가 서로 분리되어 있다

[코드2]
자바와 같은 객체 지향 언어는 클래스 내부에 속성(Data)와 기능(메서드)를 함께 포함할 수 있다.
= 객체 지향 프로그래밍
package oop1;
public class ValueData {
int value;
void add(){
value++;
System.out.println("숫자 증가 value= "+ value);
}
}
+ 객체를 생성해야 하는 add() 메서드에는 static 키워드를 사용하지 않는다
package oop1;
public class ValueDataMain {
public static void main(String[] args) {
ValueData valueData = new ValueData();
valueData.add();
valueData.add();
valueData.add();
System.out.println("최종 숫자 = "+ valueData.value);
}
}

3. 객체 지향 프로그래밍
음악플레이어 만들기~
- 속성: volume, isOn
- 기능: on(), off(), volumeUp(), volumeDown(), showStatus()
[코드1]
package oop1;
public class MusicPlayer {
int volume = 0;
boolean isOn = false;
void off() {
isOn = false;
System.out.println("음악 플레이어를 종료합니다.");
}
void on() {
isOn = true;
System.out.println("음악 플레이어를 시작합니다.");
}
void volumeDown(){
volume--;
System.out.println("음악 플레이어 볼륨:" + volume);
}
void volumeUp(){
volume++;
System.out.println("음악 플레이어 볼륨:" + volume);
}
void showStatus(){
System.out.println("음악 플레이어 상태 확인");
if(isOn){
System.out.println("음악 플레이어 On, 볼륨: "+ volume);
} else{
System.out.println("음악 플레이어 Off, 볼륨: ");
}
}
}
자신의 변수를 사용하기 때문에 각 함수의 매개변수가 필요 없다.
∴ MusicPlayer 클래스에 음악플레이어에 필요한 속성과 기능을 모두 정의했다. 음악플레이어를 사용하는데 필요한 모든 속성과 기능을 하나의 클래스에 포함했다.
=캡슐화
package oop1;
public class MusicPlayerMain4 {
public static void main(String[] args) {
MusicPlayer player = new MusicPlayer();
player.on();
player.volumeUp();
player.volumeUp();
player.volumeDown();
player.off();
}
}
[예제] 직사각형의 넓이, 둘레, 정사각형 여부 구하기
package oop1.ex;
public class Rectangle {
int width ;
int height ;
int calculateArea (){
return width * height;
}
int calculatePerimeter (){
return 2 * (width+height);
}
boolean isSquare(){
return width == height;
}
}
package oop1.ex;
public class RectangleMain {
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);
}
}
'[김영한 자바 강좌] 정리 > 기본' 카테고리의 다른 글
[김영한의 실전 자바 (기본편)] 섹션5 - 패키지 (0) | 2024.04.30 |
---|---|
[김영한의 실전 자바 (기본편)] 섹션4 - 생성자 (0) | 2024.04.22 |