package kr.or.ksmart;
abstract class User{
protected String name;
protected String age;
public final String getName() {
return name;
}
public final String getAge() {
return age;
}
public abstract void setUserInfo(String name, String age);
}
class CompanyUser extends User {
@Override
public void setUserInfo(String name, String age) {
super.name = name;
this.age = age;
}
}
public class JavaBasicEx01 {
public static void main(String[] args) {
/*
* 실습1.
* User 추상 클래스가 있다. User 추상 클래스를 확장하여 CompanyUser를 구현하고 호출하여라.
*/
User u = new CompanyUser();
u.setUserInfo("홍길동", "18");
System.out.println("이름 : "+u.getName()+"\n나이 : "+u.getAge());
}
}
package kr.or.ksmart;
abstract class Car{
private int gas;
private int num;
private String carName;
public Car (int gas, int num, String carName) {
this.gas = gas;
this.num = num;
this.carName = carName;
}
public abstract String carInfo();
public final int getGas() {
return gas;
}
public final int getNum() {
return num;
}
public final String getCarName() {
return carName;
}
}
class Bus extends Car {
public Bus(int gas, int num, String carName) {
super(gas, num, carName);
// TODO Auto-generated constructor stub
}
@Override
public String carInfo() {
int gas = super.getGas();
int num = super.getNum();
String carName = super.getCarName();
String carInfo = "연료 : "+ gas +"\n번호 : "+ num +"\n차이름 : "+ carName;
return carInfo;
}
}
public class JavaBasicEx02 {
public static void main(String[] args) {
/*
* 실습2.
* Car라는 추상 클래스가 있다.
* Car라는 추상 클래스를 확장하여 Bus클래스를 구현하고 carInfo()메서드를 호출하여라.
* carInfo : 부모 필드의 gas, num, carName의 값을 문자 결합 연산자를 사용하여 car의 정보를 출력시키는 메서드
*/
Car car = new Bus(20, 1234, "버스1234");
System.out.println(car.carInfo());
}
}
package kr.or.ksmart;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
class ProductDto{
private String productName; //상품명
private int price; //가격
private String productType; //상품분류 (임대 혹은 판매)
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getProductType() {
return productType;
}
public void setProductType(String productType) {
this.productType = productType;
}
}
//상품매출 클래스
abstract class ProductSales{
/**
* 총 분류 총합 판매 내역 등록
* */
public abstract void setProductSale(List<ProductDto> productList);
/**
* 분기 및 분류별 합산
* @return int
*/
public abstract int quarterSum();
/**
* 분기별 최대 판매 및 임대 상품명
* @return String
*/
public abstract String maxProductName();
/**
* 분기별 최소 판매 및 임대 상품명
* @return String
*/
public abstract String minProductName();
}
//임대상품
class ProductLease extends ProductSales{
List<ProductDto> productLeaseList = null;
ProductDto pDto = null;
@Override
public void setProductSale(List<ProductDto> productList) {
productLeaseList = new ArrayList<ProductDto>();
if(productList != null) {
System.out.println("-----임대상품등록시작-----");
for(int i = 0 ; i <productList.size(); i++) {
if("임대".equals(productList.get(i).getProductType())) {
System.out.println(i);
pDto = new ProductDto();
pDto.setPrice(productList.get(i).getPrice());
pDto.setProductName(productList.get(i).getProductName());
pDto.setProductType(productList.get(i).getProductType());
productLeaseList.add(pDto);
}
}
System.out.println("-----임대상품등록완료-----");
}
}
@Override
public int quarterSum() {
System.out.print("분기 임대 총합 : ");
int sum = 0;
for(int i = 0 ; i <productLeaseList.size(); i++) {
sum += productLeaseList.get(i).getPrice();
}
return sum;
}
@Override
public String maxProductName() {
System.out.print("분기 최대 임대 상품 : ");
String maxProductName = null;
int num = 0;
for(int i = 0 ; i <productLeaseList.size(); i++) {
if(num == 0) {
num = productLeaseList.get(i).getPrice();
maxProductName = productLeaseList.get(i).getProductName();
} else {
if(productLeaseList.get(i).getPrice() > num) {
maxProductName = productLeaseList.get(i).getProductName();
num = productLeaseList.get(i).getPrice();
}
}
}
return maxProductName;
}
@Override
public String minProductName() {
System.out.print("분기 최소 임대 상품 : ");
String minProductName = null;
int num = 0;
for(int i = 0 ; i <productLeaseList.size(); i++) {
if( num == 0) {
minProductName = productLeaseList.get(i).getProductName();
num = productLeaseList.get(i).getPrice();
} else {
if(productLeaseList.get(i).getPrice() < num) {
minProductName = productLeaseList.get(i).getProductName();
num = productLeaseList.get(i).getPrice();
}
}
}
return minProductName;
}
}
//판매상품
class ProductSale extends ProductSales {
List<ProductDto> productLeaseList = null;
ProductDto pDto = null;
@Override
public void setProductSale(List<ProductDto> productList) {
System.out.println("-----판매상품등록시작-----");
productLeaseList = new ArrayList<ProductDto>();
for(int i = 0 ; i <productList.size(); i++) {
if("판매".equals(productList.get(i).getProductType())) {
System.out.println(i);
pDto = new ProductDto();
pDto.setPrice(productList.get(i).getPrice());
pDto.setProductName(productList.get(i).getProductName());
pDto.setProductType(productList.get(i).getProductType());
productLeaseList.add(pDto);
}
}
System.out.println("-----판매상품등록완료-----");
}
@Override
public int quarterSum() {
System.out.print("분기 판매 총합 : ");
int sum = 0;
for(int i = 0 ; i <productLeaseList.size(); i++) {
sum += productLeaseList.get(i).getPrice();
}
return sum;
}
@Override
public String maxProductName() {
System.out.print("분기 최대 판매 상품 : ");
String maxProductName = null;
int num = 0;
for(int i = 0 ; i <productLeaseList.size(); i++) {
if( num == 0) {
num = productLeaseList.get(i).getPrice();
maxProductName = productLeaseList.get(i).getProductName();
}else {
if(productLeaseList.get(i).getPrice() > num) {
num = productLeaseList.get(i).getPrice();
maxProductName = productLeaseList.get(i).getProductName();
}
}
}
return maxProductName;
}
@Override
public String minProductName() {
System.out.print("분기 최소 판매 상품 : ");
String minProductName = null;
int num = 0;
for(int i = 0 ; i <productLeaseList.size(); i++) {
if(num == 0) {
num = productLeaseList.get(i).getPrice();
minProductName = productLeaseList.get(i).getProductName();
}else {
if(productLeaseList.get(i).getPrice() < num) {
num = productLeaseList.get(i).getPrice();
minProductName = productLeaseList.get(i).getProductName();
}
}
}
return minProductName;
}
}
public class JavaBasicEx03 {
public static void main(String[] args) {
//db에서 판매 목록 가지고 왔다는 가정
List<ProductDto> productSaleList = getPoductList();
/*
* 실습3. ProductSales은 상품의 매출을 나타낼 수 있는 추상 클래스이다.
* ProductLease 클래스는 임대상품를 담당하고,
* ProductSale 클래스는 판매상품을 담당한다.
* ProductLease와 ProductSale 클래스는 ProductSales 추상클래스를
* 확장하여 추상클래스의 메서드를 구현하고
* 출력을 하여라.
* 메서드기능 :
* quarterSum -> 분기별 합산(분류에 맞는 전체 상품 가격 합산)
* maxProductName -> 최고 매출의 상품명
* minProductName -> 최소의 매출 상품명
*/
System.out.println("======임대상품매출======");
ProductSales pl = new ProductLease();
pl.setProductSale(productSaleList);
System.out.println(pl.quarterSum());
System.out.println(pl.maxProductName());
System.out.println(pl.minProductName());
System.out.println("====================\n");
System.out.println("======판매상품매출======");
ProductSales ps = new ProductSale();
ps.setProductSale(productSaleList);
System.out.println(ps.quarterSum());
System.out.println(ps.maxProductName());
System.out.println(ps.minProductName());
System.out.println("====================");
}
/**
* 디비에서 상품 판매 및 임대 목록 가지고 온다는 가정
* @return List<ProductDto>
*/
public static List<ProductDto> getPoductList(){
List<ProductDto> productSaleList = new ArrayList<ProductDto>();
ProductDto pDto = null;
pDto = new ProductDto();
pDto.setPrice(50000);
pDto.setProductName("임대상품A");
pDto.setProductType("임대");
productSaleList.add(pDto);
pDto = new ProductDto();
pDto.setPrice(60000);
pDto.setProductName("임대상품B");
pDto.setProductType("임대");
productSaleList.add(pDto);
pDto = new ProductDto();
pDto.setPrice(30000);
pDto.setProductName("임대상품C");
pDto.setProductType("임대");
productSaleList.add(pDto);
pDto = new ProductDto();
pDto.setPrice(15000);
pDto.setProductName("판매상품A");
pDto.setProductType("판매");
productSaleList.add(pDto);
pDto = new ProductDto();
pDto.setPrice(21000);
pDto.setProductName("판매상품B");
pDto.setProductType("판매");
productSaleList.add(pDto);
pDto = new ProductDto();
pDto.setPrice(24000);
pDto.setProductName("판매상품C");
pDto.setProductType("판매");
productSaleList.add(pDto);
return productSaleList;
}
}
반복작업 최소화
package kr.or.ksmart;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
class ProductSumDto{
private int totalPrice;
private String maxProductName;
private String minProductName;
public int getTotalPrice() {
return totalPrice;
}
public void setTotalPrice(int totalPrice) {
this.totalPrice = totalPrice;
}
public String getMaxProductName() {
return maxProductName;
}
public void setMaxProductName(String maxProductName) {
this.maxProductName = maxProductName;
}
public String getMinProductName() {
return minProductName;
}
public void setMinProductName(String minProductName) {
this.minProductName = minProductName;
}
}
class ProductDto{
private String productName; //상품명
private int price; //가격
private String productType; //상품분류 (임대 혹은 판매)
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getProductType() {
return productType;
}
public void setProductType(String productType) {
this.productType = productType;
}
}
//상품매출 클래스
abstract class ProductSales{
/**
* 총 분류 총합 판매 내역 등록
* */
public abstract void setProductSale(List<ProductDto> productList);
/**
* 분기 및 분류별 합산
* @return int
*/
public abstract int quarterSum();
/**
* 분기별 최대 판매 및 임대 상품명
* @return String
*/
public abstract String maxProductName();
/**
* 분기별 최소 판매 및 임대 상품명
* @return String
*/
public abstract String minProductName();
protected final ProductSumDto setProductList(List<ProductDto> productList, String getType) {
ProductSumDto sumDto = new ProductSumDto();
int sum = 0;
String minProductName = null;
String maxProductName = null;
if(productList != null) {
int minPrice = 0;
int maxPrice = 0;
for(int i=0; i < productList.size(); i++) {
ProductDto dto = productList.get(i);
int price = dto.getPrice();
String name = dto.getProductName();
String type = dto.getProductType();
if(getType.equals(type)) {
sum += price;
if(minPrice == 0) {
minPrice = price;
minProductName = name;
}else {
if(price > minPrice) {
minPrice = price;
minProductName = name;
}
}
if(maxPrice == 0) {
maxPrice = price;
maxProductName = name;
}else {
if(price < maxPrice) {
maxPrice = price;
maxProductName = name;
}
}
}
}
}
sumDto.setTotalPrice(sum);
sumDto.setMaxProductName(maxProductName);
sumDto.setMinProductName(minProductName);
return sumDto;
}
}
//임대상품
class ProductLease extends ProductSales{
private int sum;
private String maxProductName;
private String minProductName;
@Override
public void setProductSale(List<ProductDto> productList) {
ProductSumDto sumDto = super.setProductList(productList, "임대");
this.sum = sumDto.getTotalPrice();
this.maxProductName = sumDto.getMaxProductName();
this.minProductName = sumDto.getMinProductName();
}
@Override
public int quarterSum() {
return sum;
}
@Override
public String maxProductName() {
return maxProductName;
}
@Override
public String minProductName() {
return minProductName;
}
}
//판매상품
class ProductSale extends ProductSales{
private int sum;
private String maxProductName;
private String minProductName;
@Override
public void setProductSale(List<ProductDto> productList) {
ProductSumDto sumDto = super.setProductList(productList, "판매");
this.sum = sumDto.getTotalPrice();
this.maxProductName = sumDto.getMaxProductName();
this.minProductName = sumDto.getMinProductName();
}
@Override
public int quarterSum() {
return sum;
}
@Override
public String maxProductName() {
return maxProductName;
}
@Override
public String minProductName() {
return minProductName;
}
}
public class JavaBasicEx03 {
public static void main(String[] args) {
//db에서 판매 목록 가지고 왔다는 가정
List<ProductDto> productSaleList = getPoductList();
/*
* 실습3. ProductSales은 상품의 매출을 나타낼 수 있는 추상 클래스이다.
* ProductLease 클래스는 임대상품를 담당하고,
* ProductSale 클래스는 판매상품을 담당한다.
* ProductLease와 ProductSale 클래스는 ProductSales 추상클래스를
* 확장하여 추상클래스의 메서드를 구현하고
* 출력을 하여라.
* 메서드기능 :
* quarterSum -> 분기별 합산(분류에 맞는 전체 상품 가격 합산)
* maxProductName -> 최고 매출의 상품명
* minProductName -> 최소의 매출 상품명
* */
ProductSales pro = new ProductLease();
pro.setProductSale(productSaleList);
System.out.println(pro.quarterSum());
System.out.println(pro.maxProductName());
System.out.println(pro.minProductName());
}
/**
* 디비에서 상품 판매 및 임대 목록 가지고 온다는 가정
* @return List<ProductDto>
*/
public static List<ProductDto> getPoductList(){
List<ProductDto> productSaleList = new ArrayList<ProductDto>();
ProductDto pDto = null;
pDto = new ProductDto();
pDto.setPrice(50000);
pDto.setProductName("임대상품A");
pDto.setProductType("임대");
productSaleList.add(pDto);
pDto = new ProductDto();
pDto.setPrice(60000);
pDto.setProductName("임대상품B");
pDto.setProductType("임대");
productSaleList.add(pDto);
pDto = new ProductDto();
pDto.setPrice(30000);
pDto.setProductName("임대상품C");
pDto.setProductType("임대");
productSaleList.add(pDto);
pDto = new ProductDto();
pDto.setPrice(15000);
pDto.setProductName("판매상품A");
pDto.setProductType("판매");
productSaleList.add(pDto);
pDto = new ProductDto();
pDto.setPrice(21000);
pDto.setProductName("판매상품B");
pDto.setProductType("판매");
productSaleList.add(pDto);
pDto = new ProductDto();
pDto.setPrice(24000);
pDto.setProductName("판매상품C");
pDto.setProductType("판매");
productSaleList.add(pDto);
return productSaleList;
}
}
'JAVA' 카테고리의 다른 글
[JavaBasic] 인터페이스 (0) | 2020.04.29 |
---|---|
[JavaBasic] hashCode / equals / instanceof (0) | 2020.04.29 |
[JavaBasic] 오버라이딩 / final / 추상클래스 (0) | 2020.04.28 |
[Java Basic] garbage collection / 상속 / 다형성 / 객체지향 4대조건 / 업캐스팅 / 다운캐스팅 (0) | 2020.04.22 |