변수는 기억공간이다. 그리고 선언후에 사용할 수 있다.
선언문 : 자료형 변수 초기값
자료형 : 원시타입과 참조타입
클래스 형태도 정의가 됨 : 제공받는 클래스
내가 정의한 클래스
원시타입 : 내가 사용하고자는 데이터를 값을 저장(int char boolean byte)
참조타입 : 내가 사용하고자 하는 객체의 주소값을 저장
추가> 객체는 new 연산자로 만들고 힙에 저장한다. 그리고 참조타입변수는 객체의 주소값을 저장한다.
클래스는 객체가 아니다. 객체를 정의하고 있다..
new 생성자(); 이런 식으로 new 연산자가 있어야 객체가 만들어 진다. 이 객체는 실제 내가 사용하려고 하는 것.
생성자는 메서드 다. 그리고 클래스 이름과 동일하다. 객체가 만들어 질때 호출된다. 재호출 불가.
** 클래스는 레시피, 레시피로 만들어진 실제 내가 먹으려고 하는 음식이 객체
메서드
메서드는 특정 기능을 정의 한 것
메서드는 정의부와 호출부를 따로 구분하여 기억, 메서드를 정의 놓고 호출하면서 사용한다.
호출부는 정의된 메서드이 기능을 사용하는 곳.. 예를들어 String a ="aaaa"; a.contains() // 메서드 호출불
메서드 정의는 접근제어자 리턴타입 메서드명(매개변수 1, 2 , 3 ){
}
리턴타입은 메서드가 호출되고 메서드가 실행되고 결과물을 호출부로 리턴한다. 이때 리턴하는 값이 리턴값이 되고
리턴값의 타입이 리턴타입이된다. 메서드 정의에서는 리턴타입을 기입한다.
객체 정의는 즉 클래스를 정의 하는 의미이다.
클래스는 전역변수와 메서드로 구성한다.
전역변수는 데이터를 기억하는 것. 메서드는 기능을 수행하는 것(여기서 메서드는 정의를 의미한다)
마켓관리 프로그램
메인마켓 클래스
package Market;
public class MainMarket {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("프로그램 시작");
new MainMenu();
System.out.println("프로그램 종료");
}
}
메인메뉴 클래스
package Market;
import java.util.Scanner;
public class MainMenu {
Scanner in = new Scanner(System.in);
GoodsManeger a = new GoodsManeger();
Member b = new Member(a);
MainMenu() {
for (;;) {
menu();
String selMenu = in.nextLine();
if (selMenu.equals("1")) {
a.runGoods();
} else if (selMenu.equals("2")) {
b.goShopping();
} else if (selMenu.equals("3")) {
break;
} else {
System.out.println("잘못된 입력입니다.");
}
}
}
private void menu() {
System.out.println("-----------");
System.out.println("1. 물건관리");
System.out.println("2. 쇼핑하기");
System.out.println("3. 종료");
System.out.println("-----------");
}
}
물건관리 클래스
package Market;
import java.util.ArrayList;
import java.util.Scanner;
public class GoodsManeger {
ArrayList<Goods> gList = new ArrayList<>();
Scanner in = new Scanner(System.in);
public void runGoods() {
for (;;) {
menu();
String selMenu = in.nextLine();
if (selMenu.equals("1")) {
addGoods();
} else if (selMenu.equals("3")) {
listGoods();
} else if (selMenu.equals("2")) {
modGoods();
} else if (selMenu.equals("4")) {
delGoods();
} else if (selMenu.equals("5")) {
searchGoods();
} else if (selMenu.equals("6")) {
break;
} else {
System.out.println("잘못된 입력입니다.");
}
}
}
private void searchGoods() {
System.out.println("검색할 이름을 입력하세요");
String b = in.nextLine();
boolean flag = false;
for (int i = 0; i < gList.size(); i++) {
if (gList.get(i).name.equals(b)) {
System.out.println(b + "와 같은 이름");
gList.get(i).prt();
flag = true;
System.out.println("--------------");
} else if (gList.get(i).name.indexOf(b) != -1) {
System.out.println(b + "를 포함하는 이름");
gList.get(i).prt();
flag = true;
System.out.println("--------------");
}
}
if (flag == false) {
System.out.println("이름이 없습니다.");
}
}
private void delGoods() {
System.out.println("삭제할 이름을 입력하세요");
String b = in.nextLine();
boolean flag = true;
for (int i = 0; i < gList.size(); i++) {
if (gList.get(i).name.equals(b)) {
gList.remove(i);
System.out.println(b + "삭제 완료");
flag = false;
}
}
if (flag) {
System.out.println("이름이 없습니다.");
}
}
private void modGoods() {
System.out.println("수정할 이름을 입력하세요");
String b = in.nextLine();
boolean flag = true;
for (int i = 0; i < gList.size(); i++) {
if (gList.get(i).name.equals(b)) {
System.out.println("수량을 입력하세요");
int newInt = in.nextInt();
in.nextLine();
gList.get(i).cnt = newInt;
System.out.println("가격을 입력하세요");
newInt = in.nextInt();
in.nextLine();
gList.get(i).price = newInt;
flag = false;
}
}
if (flag) {
System.out.println("이름이 없습니다.");
}
}
private void addGoods() {
Goods newGoods = new Goods();
System.out.println("이름 입력");
String name = in.nextLine();
System.out.println("아이디 입력");
String id = in.nextLine();
System.out.println("수량 입력");
int cnt = in.nextInt();
in.nextLine();
System.out.println("단가 입력");
int price = in.nextInt();
in.nextLine();
newGoods.setting(name, id, cnt, price);
gList.add(newGoods);
}
public void listGoods() {
for (int i = 0; i < gList.size(); i++) {
System.out.println(i + "번 정보-------");
gList.get(i).prt();
System.out.println("------------");
}
}
private void menu() {
System.out.println("-----------");
System.out.println("1. 물건등록");
System.out.println("2. 물건수정");
System.out.println("3. 전체보기");
System.out.println("4. 물건삭제");
System.out.println("5. 물건검색");
System.out.println("6. 이전메뉴");
System.out.println("-----------");
}
}
물건 클래스
package Market;
public class Goods {
String name = null;
String id = null;
int cnt = 0;
int price = 0;
public void setting(String name, String id, int cnt, int price) {
this.name = name;
this.id = id;
this.cnt = cnt;
this.price = price;
}
public void reCnt(int cnt) {
this.cnt -=cnt;
}
public void prt() {
System.out.println("이름: " + this.name);
System.out.println("아이디: " + this.id);
System.out.println("수량: " + this.cnt);
System.out.println("가격: " + this.price);
}
}
고객 클래스
package Market;
import java.util.ArrayList;
import java.util.Scanner;
public class Member {
String name = "guest";
ArrayList<GoodsBasket> basket = new ArrayList<>();
Scanner in = new Scanner(System.in);
GoodsManeger aa = null;
public Member(GoodsManeger aa) {
this.aa = aa;
}
public void goShopping() {
for (;;) {
menu();
String selMenu = in.nextLine();
if (selMenu.equals("1")) {
shopping();
} else if (selMenu.equals("2")) {
System.out.println("장바구니 정보-------");
viewBasket();
System.out.println("------------");
} else if (selMenu.equals("3")) {
break;
} else {
System.out.println("잘못된 입력입니다.");
}
}
}
private void viewBasket() {
for (int i = 0; i < basket.size(); i++) {
System.out.println("------------");
basket.get(i).prt();
}
}
public void shopping() {
GoodsBasket c = new GoodsBasket();
aa.listGoods();
System.out.println("구매할 물건의 번호를 입력하세요");
String a = in.nextLine();
int b = Integer.parseInt(a);
if (b < aa.gList.size()) {
System.out.println("구매할 수량을 입력하세요");
String a1 = in.nextLine();
int b1 = Integer.parseInt(a1);
c.name = aa.gList.get(b).name;
c.plusCnt(b1);
if(aa.gList.get(b).cnt-b1<0) {
System.out.println("수량이 부족합니다.");
}else {
aa.gList.get(b).reCnt(b1);
c.sumPrice(aa.gList.get(b).price);
basket.add(c);
System.out.println(aa.gList.get(b).name + b1 + "개 구매 완료");
}
} else {
System.out.println("잘못된 입력입니다.");
}
}
private void menu() {
System.out.println("-----------");
System.out.println("1. 구매하기");
System.out.println("2. 장바구니");
System.out.println("3. 이전메뉴");
System.out.println("-----------");
}
}
장바구니 물건 클래스
package Market;
public class GoodsBasket {
String name= null;
int cnt= 0;
int goodsPrice=0;
public void plusCnt(int cnt) {
this.cnt+=cnt;
}
public void sumPrice(int goodsPrice) {
this.goodsPrice= cnt*goodsPrice;
}
public void prt() {
System.out.println("물건:"+name);
System.out.println("수량:"+cnt);
System.out.println("가격:"+goodsPrice);
}
}