인터페이스를 활용한 학점 산출 프로그램 만들기 문제 정의 Good School 학교가 있습니다. 이 학교에는 5명의 학생들이 수업을 듣습니다. 과목은 국어와 수학이 있고, 각 학생은 두 과목을 모두 수강합니다. 전공은 컴퓨터공학과 국어국문학 두 가지가 있습니다. 컴퓨터공학과 학생은 수학이 필수과목이고, 국어국문학과 학생은 국어가 필수 과목입니다. 각 학생별로 한 개의 전공을 선택합니다. 이번 학기 각 학생의 성적은 다음과 같습니다. 이름 학번 전공 필수 과목 국어 점수 수학 점수 강감찬 211213 국어국문학과 국어 95 56 김유신 212330 컴퓨터공학과 수학 95 98 신사임당 201518 국어국문학과 국어 100 88 이순신 202360 국어국문학과 국어 89 95 이황 201290 컴퓨터공학과 수학 83 56 학점을 부여하는 방벅은 여러 가.. 데코레이터 패턴을 활용한 커피 머신 프로그램 Decorator Pattern 자바의 입출력 스트림은 decorator pattern 임 여러 decorator들을 활용하여 다양한 기능을 제공 상속 보다 유연한 구현 방식 데코레이터는 다른 데코레이터나 또는 컴포넌트를 포함해야 함 지속적인 기능의 추가와 제거가 용이함 decorator와 component는 동일한 것이 아님 ( 기반 스트림 클래스가 직접 읽고 쓸수 있음, 보조 스트림은 추가적인 기능 제공) 커피를 만들어보아요~ Decorator Pattern을 활용하여 커피를 만들어 봅시다. 아메리카노 카페 라떼 = 아메리카노 + 우유 모카 커피 = 아메리카노 + 우유 + 모카시럽 크림 올라간 모카커피 = 아메리카노 + 우유 + 모카시럽 + whipping cream 커피는 컴포넌트고, 우유, 모카시.. 쌍(pair)으로 자료를 관리하는 Map 인터페이스를 구현한 클래스와 그 활용 HashMap 클래스 활용하기 Map 인터페이스를 구현한 클래스와 가장 많이 사용되는 Map 인터페이스 기반 클래스 key - value를 쌍으로 관리하는 메서드를 구현함 검색을 위한 자료구조 key를 이용하여 값을 저정하고 key를 이용하여 값을 꺼내오는 방식 - hash 알고리즘으로 구현 됨 key가 되는 객체는 중복될 수 없고 객체의 유일성을 비교를 위한 equals()와 hashCode() 메서드를 구현해야 함 // Member.java 는 기존과 동일 MemberHashMap.java public class MemberHashMap { private HashMap hashMap; public MemberHashMap() { hashMap = new HashMap(); } public void a.. 정렬을 위해 Comparable과 Comparator 인터페이스 구현 TreeSet 클래스 활용하기 객체의 정렬에 사용하는 클래스 Set 인터페이스를 구현하여 중복을 허용하지 않고, 오름차순이나 내림차순으로 객체를 정렬할 수 있음 내부적으로 이진검색트리(binary search tree)로 구현됨 이진검색트리에 저장하기 위해 각 객체를 비교해야 함 비교 대상이 되는 객체에 Comparable이나 Comparator 인터페이스를 구현 해야 TreeSet에 추가 될 수 있음 String, Integer등 JDK의 많은 클래스들이 이미 Comparable을 구현했음 TreeSetTest.java import java.util.TreeSet; public class TreeSetTest { public static void main(String[] args) { TreeSet t.. 중복되지 않게 자료를 관리하는 Set 인터페이스를 구현한 클래스와 그 활용 HashSet 클래스 Set 인터페이스를 구현한 클래스와 멤버의 중복 여부를 체크하기 위해 인스턴스의 동일성을 확인해야 함 동일성 구현을 위해 필요에 따라 equals()와 hashCode()메서드를 재정의함 HashSetTest.java public class HashSetTest { public static void main(String[] args) { HashSet hashSet = new HashSet(); hashSet.add(new String("김유신")); hashSet.add(new String("이순신")); hashSet.add(new String("홍연의")); hashSet.add(new String("강감찬")); hashSet.add(new String("강감찬")); Sys.. Collection 요소를 순회하는 Iterator 요소의 순회란? 컬렉션 프레임워크에 저장된 요소들을 하나씩 차례로 참조하는것 순서가 있는 List인터페이스의 경우는 Iterator를 사용 하지 않고 get(i) 메서드를 활용할 수 있음 Set 인터페이스의 경우 get(i) 메서드가 제공되지 않으므로 Iterator를 활용하여 객체를 순회함 Iterator 사용하기 boolean hasNext() : 이후에 요소가 더 있는지를 체크하는 메서드, 요소가 있다면 true를 반환 E next() : 다음에 있는 요소를 반환 MemberArrayList.java 의 removeMember() 메서드를 Iterator를 활용하여 구현 public boolean removeMember(int memberId){ // 멤버 아이디를 매개변수로, 삭제 여부를 반환 I.. 순차적으로 자료를 관리하는 List 인터페이스를 구현한 클래스와 그 활용 멤버십 관리하기 Member 클래스를 만들고, 아이디와 이름을 멤버 변수로 선언 Member 클래스로 생성된 인스턴스들을 관리하는 클래스를 컬렉션 프레임워크 클래스들을 활용하여 구현한다. ArrayList 활용하기 멤버를 순차적으로 관리함 Member.java public class Member { private int memberId; //회원 아이디 private String memberName; //회원 이름 public Member(int memberId, String memberName){ //생성자 this.memberId = memberId; this.memberName = memberName; } public int getMemberId() { // return memberId; } pub.. 제네릭 메서드 활용 제네릭 메서드란? 자료형 매개변수를 메서드의 매개변수나 반환 값으로 가지는 메서드는 자료형 매개 변수가 하나 이상인 경우도 있음 제네릭 클래스가 아니어도 내부에 제네릭 메서드는 구현하여 사용 할 수 있음 public 반환형 메서드 이름(자료형 매개변수.....) { } 제네릭 메서드의 활용 예 두 점(top, bottom)을 기준으로 사각형을 만들 때 사각형의 너비를 구하는 메서드를 만들어 보자 두 점은 정수인 경우도 있고, 실수인 경우도 있으므로 제네릭 타입을 사용하여 구현한다. Point.java public class Point { T x; V y; Point(T x, V y){ this.x = x; this.y = y; } public T getX() { return x; } public V ge.. <T extends 클래스> 사용하기 상위 클래스의 필요성 T 자료형의 범위를 제한 할 수 있음 상위 클래스에서 선언하거나 정의하는 메서드를 활용할 수 있음 상속을 받지 않는 경우 T는 Object로 변환되어 Object 클래스가 기본으로 제공하는 메서드만 사용가능 T extends 를 사용한 프로그래밍 GenericPrinter 에 material 변수의 자료형을 상속받아 구현 T에 무작위 클래스가 들어갈 수 없게 Material 클래스를 상속받은 클래스로 한정 Material.java public abstract class Material { public abstract void doPrinting(); } Powder.java public class Powder extends Material{ public void doPrinting(.. 무엇이든 담을 수 있는 제네릭(Generic) 프로그래밍 제네릭 자료형 정의 클래스에서 사용하는 변수의 자료형이 여러개 일수 있고, 그 기능(메서드)은 동일한 경우 클래스의 자료형을 특정하지 않고 추후 해당 클래스를 사용할 때 지정 할 수 있도록 선언 실제 사용되는 자료형의 변환은 컴파일러에 의해 검증되므로 안정적인 프로그래밍 방식 컬렉션 프레임워크에서 많이 사용되고 있음 제네릭 타입을 사용하지 않는 경우의 예 재료가 Powder인 경우 public class ThreeDPrinter1{ private Powder material; public void setMaterial(Powder material) { this.material = material; } public Powder getMaterial() { return material; } } 재료가 Pla.. 큐(Queue) 구현 Queue의 특징 맨 앞(front) 에서 자료를 꺼내거나 삭제하고, 맨 뒤(rear)에서 자료를 추가 함 Fist In First Out (선입선출) 구조 일상 생활에서 일렬로 줄 서 있는 모양 순차적으로 입력된 자료를 순서대로 처리하는데 많이 사용 되는 자료구조 콜센터에 들어온 문의 전화, 메세지 큐 등에 활용됨 jdk 클래스 : ArrayList 연결 리스트를 활용하여 Queue 구헌하기 MyListQueue.java import linkedlist.MyListNode; import linkedlist.MyLinkedList; interface IQueue{ public void enQueue(String data); public String deQueue(); public void printAll.. 스택(Stack) 구현 Stack의 특징 맨 마지막 위치(top)에서만 자료를 추가,삭제, 꺼내올 수 있음 ( 중간의 자료를 꺼낼 수 없음) Last In First Out ( 후입선출 ) 구조 택배 상자가 쌓여있는 모양 가장 최근의 자료를 찾아오거나 게임에서 히스토리를 유지하고 이를 무를때 사용할 수 있음 함수의 메모리는 호출 순서에 따른 stack 구조 jdk 클래스 : Stack 배열을 활용하여 Stack 구현하기 MyArrayStack.java import array.MyArray; public class MyArrayStack { int top; MyArray arrayStack; public MyArrayStack() { top = 0; arrayStack = new MyArray(); } public MyArray.. 이전 1 2 3 4 다음