public interface Pen {
void draw();
}
public class PenApp {
public static void main(String[] args) {
/*
익명 객체
- 객체 생성할 수 없는 인터페이스/추상 클래스를 가지고
객체 생성 시점에 추상화된 메소드를 즉석에서 구현해서 객체를 생성
- 별도의 구현 클래스의 정의 없이 객체 생성이 가능하다.
*/
Pen redPen = new Pen() {
// 추상화된 메소드 재정의
public void draw() {
System.out.println("빨갛게 그리기");
}
};
redPen.draw();
Pen bluePen = new Pen() {
public void draw() {
System.out.println("파랗게 그리기");
}
};
bluePen.draw();
}
}
public class PhotoShop {
// Pen인터페이스를 구현한 객체를 전달받아서 선을 그리는 메소드
public void drawLine(Pen pen) {
pen.draw();
System.out.println("선을 그립니다.");
}
}
public class PhotoShopApp {
public static void main(String[] args) {
PhotoShop ppoShop = new PhotoShop();
Pen redPen = new Pen() {
public void draw() {
System.out.println("빨갛게");
}
};
ppoShop.drawLine(redPen);
ppoShop.drawLine(new Pen() {
public void draw() {
System.out.println("파랗게");
}
});
//람다식
ppoShop.drawLine(() -> System.out.println("노랗게"));
}
}
public interface Mouse{
void click();
void dbClick();
void wheel();
}
public abstract class MouseAdapter implements Mouse {
public void click() {
}
public void dbClick() {
}
public void wheel() {
}
}
public class MouseApp {
public static void main(String[] args) {
Mouse m1 = new Mouse() {
// 3개 다 해야. 한 개라도 빠지면
// 컴파일 오류.
public void click() {
System.out.println("공격포인트를 클릭한다.");
}
public void dbClick() {
}
public void wheel() {
}
};
Mouse m2 = new MouseAdapter() {
public void click() {
System.out.println("공격포인트를 클릭한다.");
}
};
}
}
public class Product {
private int no;
private String name;
private int price;
public Product () {}
public Product (int no, String name, int price) {
this.no = no;
this.name = name;
this.price = price;
}
// Getter/Setter 메소드
public int getNo() {
return no;
}
public String getName() {
return name;
}
public int getPrice() {
return price;
}
public void setNo(int no) {
this.no = no;
}
public void setName(String name) {
this.name = name;
}
public void setPrice(int price) {
this.price = price;
}
}
public class Order {
private Product item;
private Member customer;
public Order() {}
public Order(Product item, Member customer) {
this.item = item;
this.customer = customer;
}
//Getter/Setter
public Product getItem() {
return item;
}
public void setItem(Product item) {
this.item = item;
}
public Member getCustomer() {
return customer;
}
public void setCustomer(Member customer) {
this.customer = customer;
}
}
public class Member {
private int memberNo;
private String name;
private int password;
private int point;
public int getMemberNo() {
return memberNo;
}
public String getName() {
return name;
}
public int getPassword() {
return password;
}
public int getPoint() {
return point;
}
public void setMemberNo(int memberNo) {
this.memberNo = memberNo;
}
public void setName(String name) {
this.name = name;
}
public void setPassword(int password) {
this.password = password;
}
public void setPoint(int point) {
this.point = point;
}
}
public class MemberService {
private Member[] members = new Member[100]; // 회원정보를 저장하는 배열
private Product[] products = new Product[5]; // 상품정보를 저장하는 배열
private Order[] orders = new Order[100]; // 주문정보(상품+고객) 저장하는 배열
private int position = 0;
private int orderPosition = 0;
// 로그인된 사용자정보를 담는 세션
private Member session;
public MemberService() {
products[0] = new Product(100, "아이패드", 800000);
products[1] = new Product(200, "아이폰xs", 1600000);
products[2] = new Product(300, "갤럭시S10", 2000000);
products[3] = new Product(400, "맥북프로", 2600000);
products[4] = new Product(500, "LG그램", 1800000);
}
// 세션에 저장된 사용자정보를 반환하는 기능
public Member getSession() {
return session;
}
// 회원정보를 전달받아서 가입시키는 기능(members에 저장하기)
public void register(Member member) {
if (position < members.length) {
members[position++] = member;
// position++;
}
}
// 회원번호/비밀번호를 전달받아서 로그인처리를 수행하는 기능
public void login(int memberNo, int password) {
// member배열에서 for문을 사용해서 사용자(Member객체)를 하나씩 가져온다
// memberNo 와 Memeber객체의 번호가 일치하는 사용자(Member객체)가 있으면
// 그 사용자(Member객체)의 가입시 비밀번호와 전달받은 비밀번호를 비교한다.
// 비밀번호가 일치하면 그 사용자정보(Member객체)를 session에 담는다.
/*
boolean isSuccess = false;
for (Member member : members) {
if (member != null && memberNo == member.getMemberNo() && member.getPassword() == password) {
session = member;
isSuccess = true;
break;
} else if (member != null && memberNo == member.getMemberNo() && member.getPassword() != password) {
System.out.println("비밀번호가 틀렸습니다.");
isSuccess = true;
break;
}
}
if (!isSuccess) {
System.out.println("회원정보가 없습니다");
}
*/
Member foundMember = null;
for (Member member : members) {
if (member != null && member.getMemberNo() == memberNo) {
foundMember = member;
break;
}
}
// 메소드의 빠른 종료
// 올바르지 않는 경우를 먼저 검사해서 그 경우에 해당되면 메소드의 실행이 즉시 중단되게 하는 것
// 고객정보가 존재하지 않으면 즉시 실행 중단
if (foundMember == null) {
System.out.println("고객번호와 일치하는 고객이 존재하지 않습니다.");
return;
}
// 비밀번호가 일치하지 않으면 즉시 실행 중단
if (foundMember.getPassword() != password) {
System.out.println("비밀번호가 일치하지 않습니다.");
return;
}
// 올바르지 않은 경우를 전부 통과한 경우
// 로그인처리 작업을 수행한다.
session = foundMember;
System.out.println("로그인이 완료되었습니다.");
System.out.println("["+foundMember.getName()+"]님 환영합니다.");
/*
if (foundMember != null) {
if (foundMember.getPassword() == password) {
session = foundMember;
System.out.println("로그인이 완료되었습니다.");
System.out.println("["+foundMember.getName()+"]님 환영합니다.");
} else {
System.out.println("비밀번호가 일치하지 않습니다.");
}
} else {
System.out.println("고객번호와 일치하는 고객이 존재하지 않습니다.");
}
*/
}
// 세션에 저장된 사용자 정보를 비우는 기능
public void logout() {
session = null;
}
// 모든 회원정보를 출력하는 기능(로그인된 사용자만 사용가능하다)
public void printAllMembers() {
if (session == null) {
System.out.println("로그인 후 사용가능한 기능입니다.");
return;
}
for (Member member : members) {
printMember(member);
}
}
// 회원번호를 전달받아서 회원정보를 출력하는 기능(로그인된 사용자만 사용가능하다)
public void printMemberByNo(int memberNo) {
if (session == null) {
System.out.println("로그인 후 사용가능한 기능입니다.");
return;
}
Member foundM = null;
for (Member member : members) {
if (member != null && memberNo == member.getMemberNo()) {
foundM = member;
break;
}
}
if (foundM == null) {
System.out.println("회원정보가 존재하지 않습니다.");
return;
}
printMember(foundM);
}
// 회원정보(Member 객체)를 받아서 출력하는 기능
public void printMember(Member member) {
if (member != null) {
System.out.println("회원번호 : " + member.getMemberNo());
System.out.println("회원이름 : " + member.getName());
System.out.println("비밀번호 : " + member.getPassword());
System.out.println("포 인 트 : " + member.getPoint());
System.out.println();
}
}
// 모든 상품정보를 출력하는 기능
public void printAllProducts() {
if (session == null) {
System.out.println("로그인 후 사용가능한 기능입니다.");
return;
}
for (Product product : products) {
if (product != null) {
System.out.println("상품번호 : " + product.getNo());
System.out.println("상품이름 : " + product.getName());
System.out.println("상품가격 : " + product.getPrice());
System.out.println();
}
}
}
// 주문번호를 전달받아서 주문정보를 생성해서 배열에 담는 기능
public void order(int productNo) {
// 1. Order객체를 생성한다.
// 2. 주문번호에 해당하는 상품정보(Product객체)를 배열에서 찾는다.
// 3. Order객체에 상품정보(Product객체)와 주문자(로그인한 사람) 정보를 저장한다.
// 4. orders 배열에 주문정보(Order객체)를 저장한다.
if (session == null) {
System.out.println("로그인 후 사용가능한 기능입니다.");
return;
}
Order order = new Order();
Product foundProduct = null;
for (Product product : products) {
if (product != null && productNo == product.getNo()) {
foundProduct = product;
break;
}
}
if (foundProduct == null) {
System.out.println("상품번호와 일치하는 상품이 존재하지 않습니다.");
return;
}
order.setItem(foundProduct);
order.setCustomer(session);
if (orderPosition < orders.length) {
orders[orderPosition++] = order;
}
}
// 현재 로그인한 사람(Session의 정보 참조)의 주문내역을 출력한다.
public void printOrderHistory() {
if (session == null) {
System.out.println("로그인 후 사용가능한 기능입니다.");
return;
}
Order[] foundOrder = new Order[100];
int foundOrderPosition = 0;
for (Order order : orders) {
if (order != null && order.getCustomer().getMemberNo() == session.getMemberNo()) {
foundOrder[foundOrderPosition++] = order;
}
}
if (foundOrder == null) {
System.out.println("주문내역이 없습니다.");
return;
}
for (Order order : foundOrder) {
if (order != null) {
System.out.println("상품번호 : " + order.getItem().getNo());
System.out.println("상품이름 : " + order.getItem().getName());
System.out.println("상품가격 : " + order.getItem().getPrice());
System.out.println();
}
}
}
}
import java.util.Scanner;
public class MemberApp {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
MemberService service = new MemberService();
for (;;) {
int selNo1 = -1;
int selNo2 = -1;
if (service.getSession() == null) {
// 로그인되지 않은 회원에게 보여지는 메뉴
System.out.println("1.회원가입 2.로그인 0.종료");
System.out.print("메뉴선택> ");
selNo1 = sc.nextInt();
} else {
// 로그인된 회원에게 보여지는 메뉴
System.out.println("1.전체출력 2.한명출력 3.상품정보출력 4.주문하기 5.주문내역 6.로그아웃 0.종료");
System.out.print("메뉴선택> ");
selNo2 = sc.nextInt();
}
System.out.println();
if (selNo1 == 1) {
System.out.println("[회원가입]");
System.out.print("회원번호 입력> ");
int memberNo = sc.nextInt();
System.out.print("회원이름 입력> ");
String name = sc.next();
System.out.print("비밀번호 입력> ");
int password = sc.nextInt();
Member member = new Member();
member.setMemberNo(memberNo);
member.setName(name);
member.setPassword(password);
service.register(member);
} else if (selNo1 == 2) {
System.out.println("[로그인]");
System.out.print("회원번호 입력> ");
int memberNo = sc.nextInt();
System.out.print("비밀번호 입력> ");
int password = sc.nextInt();
service.login(memberNo, password);
} else if (selNo1 == 0) {
System.out.println("시스템 종료");
break;
} else if (selNo2 == 1) {
System.out.println("[회원 전체출력]");
service.printAllMembers();
} else if (selNo2 == 2) {
System.out.println("[회원 한명출력]");
System.out.print("회원번호 입력> ");
int memberNo = sc.nextInt();
service.printMemberByNo(memberNo);
} else if (selNo2 == 6) {
service.logout();
System.out.println("로그아웃 되었습니다.");
} else if (selNo2 == 3) {
System.out.println("[전체 상품정보 출력]");
service.printAllProducts();
} else if (selNo2 == 4) {
System.out.println("[주문하기]");
System.out.print("상품번호 입력> ");
int productNo = sc.nextInt();
service.order(productNo);
} else if (selNo2 == 5) {
System.out.println("[주문내역 보기]");
service.printOrderHistory();
} else if (selNo2 == 0) {
System.out.println("시스템 종료");
break;
}
System.out.println();
}
}
}
'자바 > oop6' 카테고리의 다른 글
Outter, Iterator, List, Account, MyWindow.java (0) | 2019.06.07 |
---|