객체지향
- 절차지향 프로그래밍
- 코드의 처음부터 마지막까지 위에서부터 아래로 명령이 수행되는 형태
- 특정한 코드가 반복되어 수행된다면 프로그램이 커질뿐 아니라 변경이 되면 모든 부분을 수정해야하는 일이 발생!
- 객체지향 프로그래밍
- 프로그램은 여러 가지 변수와 명령어를 통해 다양한 동작들을 수행
- 프로그램이 커짐에 따라 프로그래밍을 하는 입장에서는 좀 더 효율적인 방법의 프로그래밍이 필요하게 되었음!
- 프로그램 내에서 사용되는 연관성이 있는 변수들과 동작(메서드)들을 모아 하나의 개념으로 만들었는데 이를 클래스 라고함!!
- 클래스는 현실세계의 설계도라고 할 수 있으며, 이를 통해 객체를 생성하게 됨
- 객체 지향 프로그래밍(OOP : Object-Oriented Programming)은 연관된 속성과 동작을 클래스 형태로 설계하고 이를 통해 여러 개의 객체를 생성하여 필요한 부품을 만들고 이를 조립하는 거대한 프로그래밍이라고 볼 수 있다.
객체 : 주체가 바라보는(파악하는) 모든 대상(사물, 개념 등)
분석
- 공통적인 특징(요소)만 추출하는 방법(=일반화)
- 공통적인 특징을 추출하고, 특징을 포함해서 분석하는 방법(=구체화)
객체 지향 프로그래밍 절차
- 요구사항 분석
- 클래스의 설계
- 설계된 클래스로부터 객체 생성 (인스턴스 생성)
- 인스턴스를 통한 프로그램 구현
package class_;
/*
* 동물(Animal)에 해당하는 Animal 클래스 정의
* 1. 분석
* - 속성 : 이름(name, 문자열), 나이(age, 정수),
* - 기능 : 짖다(cry())
*
* 2. 설계 - 클래스 정의
* <클래스 정의 기본 문법>
* [접근제한자] class 클래스명 {
* //멤버변수
* //메서드
* }
*/
public class Animal {
//멤버변수 선언
String name; // 이름
int age; // 나이
//메서드 정의
// 짖다(cry()) : 매개변수도 없고, 리턴값도 없는 메서드형태로 만들기
// => "동물 울음 소리!" 문자열 출력
public void cry() {
System.out.println("동물 울음 소리!");
}
}
package class_;
public class Ex {
// main() 메서드는 자바 프로그램의 시작점이다!
// => main() 메서드에서부터 객체를 생성하고 사용할 수 있다!(객체를 생성하는 곳이 main메서드 안)
// 단, main() 메서드에서만 가능한 것은 아니고
// main() 메서드가 호출하는 다른 메서드에서도 사용 가능
public static void main(String[] args) {
/*
* 정의한 클래슨 설계도에 해당하므로 실제 사용을 하기 위해서는
* 반드시 실체(=객체)를 생성해야한다!(실체화)
* => 클래스를 사용하여 메모리에 생성된 객체(실체)를 만들게 되고,
* 이를 인스턴스(Instance)라고 함
*
* <클래스에 대한 인스턴스 생성 기본 문법>
* 클래스 변수명 = new 클래스명();
*
*/
int a;
// Animal 클래스의 인스턴스 생성
// 1. Animal 클래스 타입 변수 선언
Animal ani;
}
}
🍒예시) Car C = new Car(); Person p = new Person(); Student S = new Student();
Animal ani2 = new Animal();
ani2.name = "따옹이";
ani2.age=1;
System.out.println("이름:" + ani2.name);
System.out.println("나이:" + ani2.age);\\
Student 클래스 인스턴스 생성
은행계좌 클래스 정의
package class_;
public class Test2 {
public static void main(String[] args) {
Account acc = new Account();
acc.accountNo = "111-1111-111";
acc.ownerName = "홍길동";
acc.balance = 10000;
acc.showAccountInfo();
}
}
/*
* 은행계좌(Account) 클래스 정의
* 멤버변수
* - 계좌번호(accountNo, 문자열)
* - 예금주명(ownerName, 문자열)
* - 현재잔고(balance, 정수)
*
* 메서드
* - showAccountInfo() => 리턴값 없음, 매개변수 없음
* => 계좌번호, 예금주명, 현재잔고를 출력하는 메서드 정의
* ex) 계좌번호 : 111-1111-111
* 예금주명 : 홍길동
* 현재잔고 : 10000원
*
*/
class Account {
String accountNo;
String ownerName;
int balance;
public void showAccountInfo() {
System.out.println("계좌번호 : " + accountNo);
System.out.println("예금주명 : " + ownerName);
System.out.println("현재잔고 : " + balance + "원");
}
}
입출금 기능 만들기!
package class_;
public class Test2_2 {
public static void main(String[] args) {
Account2 acc = new Account2();
acc.accountNo = "111-1111-111";
acc.ownerName = "홍길동";
acc.balance = 10000;
acc.showAccountInfo();
acc.deposit(12000); //입금
int money = acc.withdraw(5000); //출금
System.out.printf("출금된 금액: %d원\\n", money);
//현재잔고보다 많은 금액을 출금하는 경우(출금 불가)
money=acc.withdraw(100000);
System.out.printf("출금된 금액: %d원\\n", money);
}
}
/*
* 은행계좌(Account) 클래스 정의
* [ 멤버변수 선언 ]
* - 계좌번호(accountNo, 문자열)
* 예금주명(ownerName, 문자열)
* 현재잔고(balance, 정수)
*
* [ 메서드 정의 ]
* - 계좌번호, 예금주명, 현재잔고를 출력하는 showAccountInof() 메서드
* ex) 계좌번호 : 111-1111-111
* 예금주명 : 홍길동
* 현재잔고 : 10000원
*
* - 입금 기능을 수행하는 deposit() 메서드
* => 입금할 금액(amount, 정수)을 전달받아 현재잔고(balance)에 누적한 후
* 입금된 금액과 입금 후 현재잔고를 출력
* ex) "입금하신 금액 : XXXXX원"
* "입금 후 현재잔고 : XXXXX원"
* => 단, 리턴값은 없음
*
* - 출금 기능을 수행하는 withdraw() 메서드
* => 출금될 금액(amount, 정수)를 전달받아 현재잔고(balance)에서 차감 후
* 출금될 금액과 출금 후 현재잔고를 출력
* ex) "출금할 금액 : XXXXX원"
* "출금 후 현재잔고 : XXXXX원"
* => 단, 출금 기능을 수행하기 전 현재잔고와 출금할 금액을 비교하여
* 현재잔고가 출금할 금액보다 적을 경우 출금을 수행하지 않고 다음과 같이 출력
* ex) "잔고가 부족하여 출금이 불가능합니다."
* "출금할 금액 : XXXXX원, 현재잔고 : XXXXX원"
* => 리턴값 있음(출금할 금액에 해당하는 금액 리턴)
*
*/
class Account2 { //멤버변수 선언
String accountNo; // 계좌번호
String ownerName; // 예금주명
int balance; // 현재잔고
public void showAccountInfo() {//메서드 정의
System.out.println("계좌번호 : " + accountNo);
System.out.println("예금주명 : " + ownerName);
System.out.println("현재잔고 : " + balance + "원");
}
public void deposit(int amount) { // 입금기능
System.out.println();
System.out.println("입금하신 금액: "+amount+"원");
balance += amount;
System.out.println("입금 후 현재잔고: "+balance+"원");
}
public int withdraw(int amount) { // 출금기능
System.out.println();
System.out.println("출금할 금액: "+amount+"원");
if(balance < amount) {
System.out.println("잔고가 부족하여 출금이 불가능합니다.");
System.out.printf("출금할 금액 : %d원, 현재잔고 : %d원\\n",amount, balance);
// return 0;
amount = 0;
} else {
balance -= amount;
System.out.printf("출금할 금액 : %d원", amount);
System.out.println("출금 후 현재잔고: "+balance+"원");
// return amount;
}
return amount;
//if문 내에서 출금 실패 시 return문에 의해 메서드를 종료하므로
//출금이 가능한 경우의 코드는 else문이 없어도 상관없다!
// public int withdraw(int amount) { // 출금기능
// if(balance < amount) {
// System.out.println("잔고가 부족하여 출금이 불가능합니다.");
// System.out.printf("출금할 금액 : %d원, 현재잔고 : %d원\\n",amount, balance);
// return 0;
//
// balance -= amount;
// System.out.printf("출금할 금액 : %d원", amount);
// System.out.println("출금 후 현재잔고: "+balance+"원");
// return amount;
// }
// }
}
}
'JAVA' 카테고리의 다른 글
[JAVA] 메서드 오버로딩을 사용하여 계산기 클래스 만들기 (0) | 2023.09.11 |
---|---|
[JAVA] 접근제한자 (0) | 2023.09.11 |
[JAVA] break문과 continue문 (1) | 2023.09.11 |
[JAVA] 중첩 while문 (0) | 2023.09.11 |
[JAVA] do ~ while문 (0) | 2023.09.11 |