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
public class Outter {
    // 인스턴스 멤버 내부 클래스 
    // Outter 객체가 생성된 다음에만 사용할 수 있는 내부 클래스
    // Outter 객체의 모든 멤버(필드, 메소드)를 사용할 수 있다.
    public class Inner1 {
    
    }
    // 정적 내부 클래스
    // Outter객체 생성 없이 사용할 수 있는 내부 클래스
    // Outter의 정적 멤버(정적 필드, 정적 메소드)만 사용할 수 있다.
    public static class Inner2 {
    
    }

    public void method() {
        int x = 10;
        x = 20;
        // 로컬 내부 클래스
        // 메소드가 실행되는 동안에만 사용할 수 있는 내부 클래스
        // Outter객체의 모든 멤버를 사용할 수 있다.
        // ...
        class Inner3 {
            public void m1() {
                System.out.println(x);
            }
        }
    }
}
​

 

public interface Iterator {

    boolean empty();
    int next();

}​

 

public class List {

    int[] data = {10, 20, 30, 40, 50};

    public Iterator getIterator() {
        Iterator it = new ListIterator();
        return it;

    }
    class ListIterator implements Iterator {
        int[] clone;
        int position;
    
        public ListIterator() {
            clone = data;
            position = 0;
        }
            
        public int next() {
            int number = 0;
            number = clone[position];
            position++;

            return number;
        }

        public boolean empty () {
            if (position < clone.length) {
                return false;
            } else {
                return true;
            }
        }
    }
}
​

 

public class IteratorApp {
    public static void main(String[] args) {
        List list = new List();
        Iterator iterator = list.getIterator();

        System.out.println(iterator.empty());
        System.out.println(iterator.next());
        System.out.println(iterator.empty());
        System.out.println(iterator.next());
        System.out.println(iterator.empty());
        System.out.println(iterator.next());
        System.out.println(iterator.empty());
        System.out.println(iterator.next());
        System.out.println(iterator.empty());
        System.out.println(iterator.next());

        System.out.println(iterator.empty());    
    }
}
​

 

public class Account {
    private int no;
    private String name;
    private int balance;

    public int getNo() {
        return no;
    }

    public String getName() {
        return name;
    }

    public int getBalance() {
        return balance;
    }

    public static class AccountBuilder {
        private int no;
        private String name;
        private int balance;

        public AccountBuilder no(int no) {
            this.no = no;
            return this;
        }

        public AccountBuilder name(String name) {
            this.name = null;
            this.name = name;
            return this;
        }

        public AccountBuilder balance(int balance) {
            this.balance = 0;
            this.balance = balance;
            return this;
        }

        public Account build() {
            Account account = new Account();
            account.no = no;
            account.name = name;
            account.balance = balance;
            return account;
        }
    }
}
​

 

public class AccountApp {
    public static void main(String[] args) {
        Account.AccountBuilder builder = new Account.AccountBuilder();
        
        builder.no(10).name("홍길동");
        Account account1 = builder.build();
        System.out.println("번호 : " + account1.getNo());
        System.out.println("이름 : " + account1.getName());
        System.out.println("잔고 : " + account1.getBalance());

        builder.no(20).balance(230000);
        Account account2 = builder.build();
        System.out.println("번호 : " + account2.getNo());
        System.out.println("이름 : " + account2.getName());
        System.out.println("잔고 : " + account2.getBalance());

        builder.no(40).name("김유신").balance(430000);
        Account account3 = builder.build();
        System.out.println("번호 : " + account3.getNo());
        System.out.println("이름 : " + account3.getName());
        System.out.println("잔고 : " + account3.getBalance());

        Account account4 = builder.no(50).name("강감찬").balance(5000000).build();
        System.out.println("번호 : " + account4.getNo());
        System.out.println("이름 : " + account4.getName());
        System.out.println("잔고 : " + account4.getBalance());
    }
}
​

 

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class MyWindow extends JFrame {

    JTextArea area = new JTextArea();
    JTextField field = new JTextField();
    JButton btn = new JButton("전송");

    public MyWindow() {
        setTitle("연습 프로그램");
        
        JPanel panel = new JPanel(new BorderLayout());
        add(new JScrollPane(area), BorderLayout.CENTER);
        add(panel, BorderLayout.SOUTH);
        panel.add(field, BorderLayout.CENTER);
        panel.add(btn, BorderLayout.EAST);
        
        ActionListener listener = new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                String text = field.getText();
                area.append(text);
                area.append("\n");
                field.setText("");
                field.requestFocus();
            }
        };
        field.addActionListener(listener);
        btn.addActionListener(listener);
    
        setBounds(100, 100, 300, 300);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        field.requestFocus();
    }

    public static void main(String[] args) {
        new MyWindow();
    }
}
​

'자바 > oop6' 카테고리의 다른 글

PhotoShop, Mouse, Member.java  (0) 2019.06.07

+ Recent posts