일반

활용목적 - 참고자료

자료 3가지 모두체크

 

JSON 자바 컨버터

 

 

 

 

 

제이슨데이터 원형을 클래스파일 만들기

*주의* key이름을 영어로 만들어야함 (이름 -> name)

 

 

 

 

 

InputStream

여러개 입력해도 하나만 입력됨 (다 받으려면 while등을 이용해야함)

char로 캐스팅하여 출력

 

문자 스트림 (가변적이지 않다 - 길이를 미리 정해야함)

 

 

 

접근 지정자

public : 공용 ( 다른패키지 등 어디에서든지 접근 가능)

default : 같은 패키지에서만 접근 가능

private : 같은 클래스 안에서만 접근 가능 (게터 세터 등의 메서드로 접근)

protected : 같은 클래스나 자식 클래스에서만 찾을 수 있다 (상속을 받아야만 사용 가능)

----------------------------------

 

메뉴내용 클래스를 만든다 
(String, int 를 같이 넣기위해서 클래스 자료형생성)

package coffeeshop;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data   // getter, setter 자동생성 (눈에 보이지 않음)
@NoArgsConstructor // 디폴트 생성자
@AllArgsConstructor // 모든 매개변수를 가진 생성자
public class MenuItem {
	private String name;
	private int price;
}

 

커피 클래스를 만든다
(String, int 를 가지기 때문에 클래스 자료형)

package coffeeshop;

import lombok.Data;

@Data // getter, setter 자동생성
public class Coffee {
	private String name;
	private int price;
	
	public Coffee(MenuItem menuItem) {
		this.name = menuItem.getName();
		this.price = menuItem.getPrice();
	}
}

 

바리스타 생성

바리스타는 메뉴내용을 입력받아서 해당 커피를 생성한다

package coffeeshop;


// 책임 : 커피생성
public class Barista {
	public Coffee 커피생성(MenuItem menuItem) {
		return new Coffee(menuItem);
	}
}

 

메뉴판 클래스를 생성

메뉴내용을 저장하고

메뉴판은 메뉴가 있는지 찾아 준다

package coffeeshop;

import java.util.ArrayList;

import lombok.Data;

// 책임 : 메뉴 선택
@Data
public class Menu {

	// 메뉴 아이템들 (컬렉션)
	private ArrayList<MenuItem> menuItems;

	public Menu(ArrayList<MenuItem> menuItems) {
		this.menuItems = menuItems;
	}

	
	// 메뉴판에 메뉴가 있는지 찾는 코드
	public MenuItem 메뉴선택(String menuName) {
		for (MenuItem menuItem : menuItems) { // foreach문은 : 뒤에 배열이 들어가고 배열의 길이만큼 돈다
			if (menuItem.getName().equals(menuName)) {
				
				// menuItems 리스트 안에 menuName와 같은 이름의 커피가 있다면 리턴
				//(리턴하면 함수를 빠져나간다)
				return menuItem;
			}
		}
		return null;
	}

}

 

소비자 생성

소비자는 가게에서 주문을 한다

-메뉴판에서 내가 고를 메뉴내용을 선택하고

-바리스타에게 커피를 만들어달라고 한다

package coffeeshop;

import lombok.Data;

// 책임 : 주문
@Data
public class Comsumer {

	public void 주문(String menuName, Menu menu, Barista barista) {
		
		// 손님 -> 메뉴판에 메시지를 보낸다 (메뉴 선택해줘)
		MenuItem menuItem = menu.메뉴선택(menuName);

		if (menuItem == null) {
			System.out.println(menuName + "은 우리 커피숍에 없습니다.");
		} else {

			// 손님 -> 바리스타에게 메시지를 보낸다 (커피 생성해줘)
			Coffee coffee = barista.커피생성(menuItem);
			System.out.println("커피를 받았습니다.");
			System.out.println(coffee.getName());
			System.out.println(coffee.getPrice());
		}
	}
}

 

메인

메인에서는 바리스타, 손님, 메뉴판을 생성한다

그리고 손님이 주문하면 모든 일들이 진행된다

package coffeeshop;

import java.util.ArrayList;

public class CoffeeApp {
	public static void main(String[] args) {

		// 바리스타, 손님
		Comsumer comsumer = new Comsumer();
		Barista barista = new Barista();
		

		// 메뉴 생성과 메뉴판 리스트에 자료를 넣는 것은 바리스타의 일이지만
		// 간략하게 하기위해서 메인에서 작성한다
		
		// 개별 메뉴 생성
		MenuItem m1 = new MenuItem("아메리카노", 1500);
		MenuItem m2 = new MenuItem("카페라떼", 2500);
		MenuItem m3 = new MenuItem("카푸치노", 4000);

		// 어레이 리스트에 자료 입력 .add
		ArrayList<MenuItem> menuItems = new ArrayList<>();
		menuItems.add(m1);
		menuItems.add(m2);
		menuItems.add(m3);

		// 어레이리스트 자료를 출력할때 .get
		System.out.println(menuItems.get(1).getName());
		System.out.println();
		
		
		// 메뉴 생성
		Menu menu = new Menu(menuItems);
		
		comsumer.주문("아메리카노", menu, barista);
	}
}

 

 

 

기본햄버거 생성

package composite;

import lombok.Data;

@Data // getter, setter 생성
public class Burger {
	private int price;
	private String desc;

	public Burger() {
		this(1500, "기본버거");
	}

	public Burger(int price, String desc) {
		this.price = price;
		this.desc = desc;
		System.out.println(desc + "가 만들어졌습니다.");
	}
	
	public static void main(String[] args) {
		System.out.println(new Burger().getPrice());
	}
}

 

코카콜라 만들기

package composite;

import lombok.Data;

@Data
public class Coke {
	private int price;
	private String desc;
	
	public Coke() {
		this(1500, "코카콜라");
	}
	
	public Coke(int price, String desc) {
		this.price = price;
		this.desc = desc;
		System.out.println(desc + "가 만들어졌습니다.");
	}
	
	public static void main(String[] args) {
		System.out.println(new Coke().getPrice());
	}
}

 

감자칩 만들기

package composite;

import lombok.Data;

@Data
public class FrenchFried {
	private int price;
	private String desc;
	
	public FrenchFried() {
		this(2000, "감자칩");
	}
	
	public FrenchFried(int price, String desc) {
		this.price = price;
		this.desc = desc;
		System.out.println(desc + "이 만들어졌습니다.");
	}
	
	public static void main(String[] args) {
		System.out.println(new FrenchFried().getPrice());
	}
}

 

Burger를 상속받아서 BigBurger 만들기

package composite;

import lombok.Data;

@Data
public class BigBurger extends Burger {
	public BigBurger() {
		super(4000, "빅버거");
	}
	
	public BigBurger(int price, String desc) {
		super(price, desc);
	}
	
	public static void main(String[] args) {
		System.out.println(new BigBurger().getPrice());
	}
}

 

Burger를 상속받아서 ShrimpBurger 만들기

package composite;

import lombok.Data;

@Data
public class ShrimpBurger extends Burger {

	public ShrimpBurger() {
		super(3500, "쉬림프버거");
	}

	public ShrimpBurger(int price, String desc) {
		super(price, desc);
	}
	
	public static void main(String[] args) {
		System.out.println(new ShrimpBurger().getPrice());
	}
}

 

콤포지션을 이용하여 클래스 안에 클래스를 사용하기

BigBurgerSet만들기

package composite;

import lombok.Data;

// 자바는 다중 상속이 안됨 (부모가 여럿이 될 수 없음)

@Data
public class BigBurgerSet {
	// 콤포지션(중요) - 상속이 아닌 만들어 놓은 클래스를 가져오는 것
	private BigBurger bigBurger;
	private Coke coke;
	private FrenchFried frenchFried;
	
	public BigBurgerSet() {
		this(new BigBurger(), new Coke(), new FrenchFried());
	}
	
	public BigBurgerSet(BigBurger bigBurger) {
		this.bigBurger = bigBurger;
		this.coke = new Coke();
		this.frenchFried = new FrenchFried();
	}

	public BigBurgerSet(BigBurger bigBurger, Coke coke, FrenchFried frenchFried) {
		this.bigBurger = bigBurger;
		this.coke = coke;
		this.frenchFried = frenchFried;
	}
	
	public static void main(String[] args) {
		System.out.println(new BigBurgerSet().getBigBurger());
	}

}

 

ShrimpBurgerSet  만들기

package composite;

import lombok.Data;

@Data
public class ShrimpBurgerSet {

	// 콤포지션(중요) - 상속이 아닌 만들어 놓은 클래스를 가져오는 것
	private ShrimpBurger shrimpBurger;
	private Coke coke;
	private FrenchFried frenchFried;
	
	public ShrimpBurgerSet() {
		this(new ShrimpBurger(), new Coke(), new FrenchFried());
	}
	
	public ShrimpBurgerSet(ShrimpBurger shrimpBurger) {
		this(shrimpBurger, new Coke(), new FrenchFried());
	}
	
	public ShrimpBurgerSet(Coke coke) {
		this(new ShrimpBurger(), coke, new FrenchFried());
	}
	
	public ShrimpBurgerSet(FrenchFried frenchFried) {
		this(new ShrimpBurger(), new Coke(), frenchFried);
	}
	
	public ShrimpBurgerSet(ShrimpBurger shrimpBurger, Coke coke) {
		this(shrimpBurger, coke, new FrenchFried());
	}
	
	public ShrimpBurgerSet(ShrimpBurger shrimpBurger, FrenchFried frenchFried) {
		this(shrimpBurger, new Coke(), frenchFried);
	}
	
	public ShrimpBurgerSet(Coke coke, FrenchFried frenchFried) {
		this(new ShrimpBurger(), coke, frenchFried);
	}
	
	
	// 생성자가 제일 많은 것이 기준
	public ShrimpBurgerSet(ShrimpBurger shrimpBurger, Coke coke, FrenchFried frenchFried) {
		this.shrimpBurger = shrimpBurger;
		this.coke = coke;
		this.frenchFried = frenchFried;
	}
	
	public static void main(String[] args) {
		System.out.println(new ShrimpBurgerSet().getShrimpBurger());
	}
}

 

LotteriaApp 만들기 (햄버거 운영)

package composite;

public class LotteriaApp {
	public static void main(String[] args) {
		// 빅버거 세트
		BigBurgerSet set1 = new BigBurgerSet();
		
		System.out.println();
		
		// 기본버거
		Burger burger1 = new Burger();
		
		System.out.println();
		
		// 콜라
		Coke coke1 = new Coke();
		
		System.out.println();
		
		
		// BigBurgerSet
		BigBurgerSet set2 = new BigBurgerSet(
				new BigBurger(3000, "빅버거할인"),
				new Coke(),
				new FrenchFried()	
				);
		
		System.out.println();
		
		BigBurgerSet set3 = new BigBurgerSet(
				new BigBurger(2000, "빅버거할인"),
				new Coke(),
				new FrenchFried()
				);
		
		
		System.out.println();
		
		
		// 새우버거 세트 추가요
		ShrimpBurgerSet set4 = new ShrimpBurgerSet();
		
		System.out.println();
		
		
		BigBurgerSet set5 = new BigBurgerSet(
				new BigBurger(2000, "빅버거할인")
				);
		
		
		System.out.println();
	}
}

 

 

제네릭은 클래스 안에 들어갈 자료형을 선언 및 초기화시 정할 수 있는 것을 말한다.

package coffeeshop.test;

class Data1 {
	
	// 오브젝트 자료형은 받기는 쉬우나 받은뒤 사용하려면 캐스팅 해야하기 때문에 불편
	Object data;
}


// 제네릭
class Data <T> {
	T value;
}

// 콤마를 통해서 두개를 넣을 수 있다
class Str<K, V>{
	K k;
	V v;
}


public class GenericEx01 {
	public static void main(String[] args) {
		Data1 data1 = new Data1();
		data1.data = "오브젝트자료형";
		System.out.println((String)data1.data);
		
		
		
		Data<String> data = new Data<>();
		data.value = "제네릭문자열";
		System.out.println(data.value);
		
		// 제네릭에는 기본자료형이 들어갈 수 없다 (Wrapper 클래스로 감싸야한다)
		// Wrapper 클래스 = 기본자료형에 첫글자에 대문자(클래스자료형처럼) (기본자료형의 수만큼 있음)
		// int -> Integer / char -> Character
		Data<Integer> data2 = new Data<>(); 
		
		data2.value = 10;
		System.out.println(data2.value);
		
		
		Str<String, String> s = new Str<>();
		s.k = "비밀번호";
		s.v = "bitc5500";
		
		System.out.println(s.k);
		System.out.println(s.v);
	}
}

1.손님이 커피숍에 들어간다

오브젝트 손님
오브젝트 커피숍

------------------

2.손님이 바리스타에게 가서 주문

오브젝트 바리스타

---------------------

3.손님이 메뉴판을 본다

오브젝트 메뉴판
오브젝트 메뉴목록
오브젝트 메뉴

---------------------

4.손님이 바리스타에게 아메리카노를 주문한다

---------------------

5.바리스타가 아메리카노를 만든다

---------------------

6.바리스타가 아메리카노를 손님에게 준다

-----------------------

객체지향 프로그래밍에서는 현실에서 생명이 없는 것들도 살아있는 것처럼 취급한다.

오브젝트들은 각자의 역할이 있고 협력을 한다

오브젝트 => 역할(부모클래스) => 책임(메서드)

오브젝트 => 협력 => 메시지(함수의 호출)

역할, 책임, 협력, 메시지 -- 네개가 합쳐져서 객체지향을 이룬다 

역할은 대체될 수 없고 (부모클래스, 추상클래스, 인터페이스) 그 아래 오브젝트는 대체 될 수 있다.
(Protoss=역할 Object=질럿,드라군)

책임 없이 데이터만 있는 애들 - 클래스 자료형 : Beans, Model, 데이터베이스의 테이블

----------------------

배열
- 빠르다, 생성 후 배열길이를 줄이거나 늘릴 수 없다

링크드 리스트
- 느리다, 배열길이를 줄이거나 늘릴 수 있다

어레이리스트
- 배열길이를 줄이거나 늘릴 수 있다
- 순차적으로 정렬되서 랜덤엑세스가 가능하다(검색효율이 뛰어나다)
- 수정 삭제시 링크드 리스트 보다 느리다

----------------------------

 

 

 

기본버거 콜라 감자튀김을 만든다

package composite;

import lombok.Data;

@Data // getter, setter 생성
public class Burger {
	private int price;
	private String desc;

	public Burger() {
		this(1500, "기본버거");
	}

	public Burger(int price, String desc) {
		this.price = price;
		this.desc = desc;
		System.out.println(desc + "가 만들어졌습니다.");
	}
}
package composite;

import lombok.Data;

@Data
public class Coke {
	private int price;
	private String desc;
	
	public Coke() {
		this(1500, "코카콜라");
	}
	
	public Coke(int price, String desc) {
		this.price = price;
		this.desc = desc;
		System.out.println(desc + "가 만들어졌습니다.");
	}
}
package composite;

import lombok.Data;

@Data
public class FrenchFried {
	private int price;
	private String desc;
	
	public FrenchFried() {
		this(2000, "감자칩");
	}
	
	public FrenchFried(int price, String desc) {
		this.price = price;
		this.desc = desc;
		System.out.println(desc + "이 만들어졌습니다.");
	}
}

 

버거를 상속 받아 빅버거와 쉬림프버거를 만든다

package composite;

public class BigBurger extends Burger {
	public BigBurger() {
		super(4000, "빅버거");
	}
	
	public BigBurger(int price, String desc) {
		super(price, desc);
	}
}
package composite;

public class ShrimpBurger extends Burger {

	public ShrimpBurger() {
		super(3500, "쉬림프버거");
	}

	public ShrimpBurger(int price, String desc) {
		super(price, desc);
	}
}

 

 

 

콤포지션

- 상속이 아닌 만들어 놓은 클래스를 가져오는 것

 

빅버거, 쉬림프버거, 감자튀김, 콜라 를 이용해서 세트를 만들기

package composite;

import lombok.Data;

// 자바는 다중 상속이 안됨 (부모가 여럿이 될 수 없음)

@Data
public class BigBurgerSet {
	// 콤포지션(중요) - 상속이 아닌 만들어 놓은 클래스를 가져오는 것
	private BigBurger bigBurger;
	private Coke coke;
	private FrenchFried frenchFried;
	
	public BigBurgerSet() {
		this(new BigBurger(), new Coke(), new FrenchFried());
	}

	public BigBurgerSet(BigBurger bigBurger, Coke coke, FrenchFried frenchFried) {
		this.bigBurger = bigBurger;
		this.coke = coke;
		this.frenchFried = frenchFried;
	}

}
package composite;

import lombok.Data;

@Data
public class ShrimpBurgerSet {

	// 콤포지션(중요) - 상속이 아닌 만들어 놓은 클래스를 가져오는 것
	private ShrimpBurger shrimpBurger;
	private Coke coke;
	private FrenchFried frenchFried;

	public ShrimpBurgerSet() {
			this(new ShrimpBurger(), new Coke(), new FrenchFried());
		}

	public ShrimpBurgerSet(ShrimpBurger shrimpBurger, Coke coke, FrenchFried frenchFried) {
			this.shrimpBurger = shrimpBurger;
			this.coke = coke;
			this.frenchFried = frenchFried;

		}

}

 

실행 파일을 만들어서 실행해보기

package composite;

public class LotteriaApp {
	public static void main(String[] args) {
		// 빅버거 세트
		BigBurgerSet set1 = new BigBurgerSet();
		
		System.out.println();
		
		// 기본버거
		Burger burger1 = new Burger();
		
		System.out.println();
		
		// 콜라
		Coke coke1 = new Coke();
		
		System.out.println();
		
		
		// BigBurgerSet
		BigBurgerSet set2 = new BigBurgerSet(
				new BigBurger(3000, "빅버거할인"),
				new Coke(),
				new FrenchFried()	
				);
		
		System.out.println();
		
		BigBurgerSet set3 = new BigBurgerSet(
				new BigBurger(2000, "빅버거할인"),
				new Coke(),
				new FrenchFried()
				);
		
		System.out.println();
		
		
		// 새우버거 세트 추가요
		ShrimpBurgerSet set4 = new ShrimpBurgerSet();
		
		System.out.println();
	}
}

 

생성자 오버로딩

package composite;

import lombok.Data;

@Data
public class ShrimpBurgerSet {

	// 콤포지션(중요) - 상속이 아닌 만들어 놓은 클래스를 가져오는 것
	private ShrimpBurger shrimpBurger;
	private Coke coke;
	private FrenchFried frenchFried;
	
	public ShrimpBurgerSet() {
		this(new ShrimpBurger(), new Coke(), new FrenchFried());
	}
	
	public ShrimpBurgerSet(ShrimpBurger shrimpBurger) {
		this(shrimpBurger, new Coke(), new FrenchFried());
	}
	
	public ShrimpBurgerSet(Coke coke) {
		this(new ShrimpBurger(), coke, new FrenchFried());
	}
	
	public ShrimpBurgerSet(FrenchFried frenchFried) {
		this(new ShrimpBurger(), new Coke(), frenchFried);
	}
	
	public ShrimpBurgerSet(ShrimpBurger shrimpBurger, Coke coke) {
		this(shrimpBurger, coke, new FrenchFried());
	}
	
	public ShrimpBurgerSet(ShrimpBurger shrimpBurger, FrenchFried frenchFried) {
		this(shrimpBurger, new Coke(), frenchFried);
	}
	
	public ShrimpBurgerSet(Coke coke, FrenchFried frenchFried) {
		this(new ShrimpBurger(), coke, frenchFried);
	}
	
	
	// 생성자가 제일 많은 것이 기준
	public ShrimpBurgerSet(ShrimpBurger shrimpBurger, Coke coke, FrenchFried frenchFried) {
		this.shrimpBurger = shrimpBurger;
		this.coke = coke;
		this.frenchFried = frenchFried;
	}
	
	public static void main(String[] args) {
		ShrimpBurgerSet s1 = new ShrimpBurgerSet(new Coke(), new FrenchFried());
	}
}

 

+ Recent posts