본문 바로가기

자바 수업 정리

수업정리 9일차.

생성자 , getter/setter 말고도 객체의 내용을 출력하는 메서드인 toString도 자동생성 가능

 

@Override : 어노테이션(에너테이션) => 작은 기능이 있는 정의어
override(오버라이드) : 부모의 메서드를 자식이 가져와서 재정의 하는 기능

 

오버라이딩 : 부모클래스의 메서드를 재정의하여 사용하는 것
 - 부모클래스의 메서드와 선언부가 일치해야함. { 구현만 재정의 가능. }
 - 접근제한자는 더 넓은 범위만 가능, 축소는 안됨.

 

Student 클래스를 만들어서 사용해보자

조건


 - 학생 정보를 관리하기 위한 클래스
 - 학생 기본정보 : 이름, 생년월일, 전화번호, 나이
 - 학원 정보 : 학원명 = "EZEN" (final static), 지점
 - 수강 정보 : 수강과목, 기간 
 => 여러과목을 들을 수 있음. (여러과목을 수강하기 위해서는 배열로 처리 5과목까지 가능)


 ex) 홍길동(010101) 010-1111-1111 / 25  -> 학생정보

   EZEN(인천) -> 학원정보
   자바 6개월, 파이썬1개월 , SQLD 1개월 -> 수강정보


 * 기능(메서드)
 - 학생의 기본정보를 출력하는 기능
 - 학원 정보를 출력하는 기능
 - 수강정보를 출력하는 기능
 - 학생이 수강정보를 추가하는 기능
 

public class Student {

	private String name;
	private String btday;
	private String tel;
	private int age;
	private static final String BRAND = "EZEN";
	private String gigum;
	private String[] program = new String[5];
	private String[] date = new String[5];
	private int cnt;


	public Student() {

	}

	public Student(String name, String btday, String tel, int age) {
		this.name = name;
		this.btday = btday;
		this.tel = tel;
		this.age = age;
	}

	public Student(String name, String btday, String tel, int age, String gigum) {
		this(name, btday, tel, age);
		this.gigum = gigum;
	}

	public Student(String name, String btday, String tel, int age, String gigum, String[] program, String[] date) {
		this(name, btday, tel, age, gigum);
		this.program = program;
		this.date = date;
	}
	

	public void stPrint() {
		System.out.println(name + "(" + btday + ") " + tel + " / " + age);
	}
	
	public void ePrint() {
		System.out.println(BRAND + "(" + gigum + ")");
	}
	
	public void infoPrint() {
		for (String ptmp : program) {
			System.out.print(ptmp + " ");
		}
		System.out.println();
		for (String dtmp : date) {
			System.out.print(dtmp + " ");
		}
		System.out.println();
	}
	
	public void infoPrint2() {
		if( program.length == 0 || cnt ==0) {
			System.out.println("수강과목이 없습니다.");
			return;
		}
		for(int i=0; i<cnt; i++) {
			System.out.print(program[i] + "(" + date[i] +")  ");
		}
		System.out.println();
	}
	
	public void addProgram(String program, String date) {
		for (int i = 0; i < this.program.length; i++) {
			if (this.program[i] == null) {
				this.program[i] = program;
				this.date[i] = date;
				return;
			} 
		}
		System.out.println("5개이상의 강의를 들을 수 없습니다.");
	}
	public void addProgram2(String program, String date) {
		// cnt 가 0인 상황 ( 하나도 추가되지 않은 상황 )
		if( cnt >= 5 ) {
			System.out.println("더이상 수강하실 수 없습니다.");
			// 배열을 늘려서 더 많은 수강을 받을 수도 있음. (배열복사)
			return;
		} 
		this.program[cnt] = program;
		this.date[cnt] = date;
		cnt++;
	}

 

여기다가 getter/setter

 

 


상속(Inheritance) : 부모 클래스의 멤버 요소를 자식이 돌려받는 것.
멤버요소 : 멤버변수, 메서드 사용가능.
private 상속 안됨.상속받는 부모클래스가 다른 패키지에 있다면 default도 상속대상이 안됨.
public / protected 접근제한자만 가능 

 상속 키워드 : extends
상속은 1개만 가능. 다중 상속을 허용하지 않음.

class 자식 class extends 부모 class명 extends명 {
본인의 멤버변수와 메서드 구현 가능.
본인멤버변수 + 본인메서드 + 부모멤버변수 + 부모메서드
}

 

 추상클래스 : 미완성 클래스, 추상메서드를 포함하는 클래스
추상클래스 요소 : 멤버변수 + 상수(final) + 일반메서드 + 추상메서드 
추상클래스 : 객체를 생성할 수 없다. 반드시 추상메서드를 구현하여 완성해야 객체를 생성
추상메서드 : 메서드의 선언부만 있고, 구현이 없는 메서드
추상 키워드 : abstract

 

abstract class Animal{}
abstract public void howl(매개변수); // 추상메서드
- 추상클래스에 abstract 키워드는 반드시 포함해야 함.
- 인터페이스는 추상메서드를 포함해도 abstract 키워드가 생략가능.
- 추상클래스는 상속을 하기위한 부모클래스를 생성 할 때 사용
- 상속받은 클래스에 추상메서드가 있다면 반드시 구현 

 

 


 

Product 클래스를 만들어서

controller에서 구현하고

main에서 실행 할 수 있도록 만들어보기.

 

getter / setter 는 길어서 생략. 들어가있음.

 

public class Product {
	
	private String name;
	private String price;
	private int num;
	
	public Product() {
		
	}
	
	public Product(String name, String price) {
		this.name = name;
		this.price = price;
	}
	
	public void insertProduct(String name, String price) {
		this.name = name;
		this.price = price;
	}
	
	@Override
	public String toString() {
		return name + ":" + price + "원" ;
	}

 

상품의 이름, 가격을 설정해주고 생성자와 상품 추가 메서드까지만 구현

num는 상품의 고유번호로 넘버링해서 상품을 찾을 때 사용 할 예정.

 

public class ProductController {
	// Product 배열생성
	// 추가 , 삭제 , 수정 , 리스트보기

	private Product[] menu = new Product[10];
	private int cnt = 0;

	public void printProduct() {

		if (cnt == 0) {
			System.out.println("상품이 없습니다. 추가해주세요");
		} else {
			for (int i = 0; i < cnt; i++) {
				System.out.println(menu[i] + " 상품번호: " + menu[i].getNum());
			}
		}

	}

	public void insertProduct(Scanner scan) {

		// 배열이 다 찼다면... 배열 늘려주기.
		// 배열은 길이를 한번 정하면
		// 배열은 길이를 한번 정하면 변경 불가능.
		// 더 긴 길이의 배열을 생성하여 배열 복사 후 배열 교체

		if (cnt == menu.length) {
			// 5개 더 많은 길이의 배열을 생성
			Product[] tmp = new Product[menu.length + 5];
			// 배열 복사 기존배열의 0 번지부터 새배열으ㅏ 0번지부터 복사 cnt 개수만큼
			System.arraycopy(menu, 0, tmp, 0, cnt);
			menu = tmp;
		}

		System.out.println("상품명과 가격을 입력해주세요");
		String name = scan.next();
		String price = scan.next();

		Product p = new Product();
		p.insertProduct(name, price);
		p.setNum(cnt + 1);
		menu[cnt] = p;
		cnt++;

	}

	public void deleteProdcut(Scanner scan) {
		System.out.println("삭제할 상품번호를 입력해주세요.");
		int delNum = scan.nextInt();
		boolean found = false;

		for (int i = 0; i < cnt; i++) {
			if (menu[i].getNum() == delNum) {
				for (int j = i; j < cnt - 1; j++) {
					menu[j] = menu[j + 1];
					menu[j].setNum(j + 1);
				}
				menu[cnt - 1] = null;
				cnt--;
				found = true;
				break;
			}

		}

		if (!found) {
			System.out.println("해당 상품이 목록에 없습니다.");
		}
		
		printProduct();
	}


	public void modifyProduct(Scanner scan) {
		System.out.println("수정할 상품번호를 입력해주세요");
		int modifyNum = scan.nextInt();
		boolean found = false;

		for (int i = 0; i < cnt; i++) {
			if (menu[i].getNum() == modifyNum) {
				System.out.println("바꿀 상품을 입력해주세요");
				String name = scan.next();
				String price = scan.next();
				menu[i].insertProduct(name, price);
				found = true;
				break;
			}
		}

		if (!found) {
			System.out.println("해당 상품이 목록에 없습니다.");
		}
	}

 

상품 리스트 출력 / 추가 / 삭제 / 수정이 가능하도록 구현

 

입력해둔 num를 통해 상품마다 고유 넘버를 만들어주고 getNum으로 가져와 찾아가지고

원하는 상품을 추가 / 삭제 / 수정하도록함.

 

삭제 시 번호가 삭제되므로 번호를 재정렬 할 수 있도록 해줌.

public class ProductMain {

	public static void main(String[] args) {
		// 키오스크 생성
		// 1. 전체 상품리스트 | 2. 상품등록 | 3. 상품삭제 | 4. 상품수정 | 5. 종료
		
		ProductController productController = new ProductController();
		
		Scanner scan = new Scanner(System.in);
		
		int menu = 0;
		
		do {
			
			// 메뉴를 받을 때 필요, 상품을 받을 때 필요
			// 스캐너를 매개변수로 전달 
			System.out.println("메뉴를 선택해주세요 1.전체상품리스트 | 2.상품등록 | 3.상품삭제 | 4.상품수정 | 5.종료");
			System.out.println("menu >> ");
			menu = scan.nextInt();
			switch(menu) {
			case 1 : productController.printProduct();  break;
			case 2 : productController.insertProduct(scan);  break;
			case 3 : productController.deleteProdcut(scan);  break;
			case 4 : productController.modifyProduct(scan);  break;
			case 5 : System.out.println("키오스크 종료!!"); break;
			default : System.out.println("잘못된 메뉴입니다.");
			
			}
			
			
		} while(menu != 5);
		
		
	}

}

 

'자바 수업 정리' 카테고리의 다른 글

수업정리 11일차.  (0) 2024.10.04
수업정리 10일차.  (1) 2024.10.02
자바 설정 관련  (1) 2024.09.25
수업정리 8일차.  (3) 2024.07.24
수업정리 7일차.  (2) 2024.07.23