250x250
Notice
Recent Posts
Recent Comments
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags more
Archives
Today
Total
관리 메뉴

개린이 개발노트

국비지원 JAVA(자바) 프로그래밍 (메서드호출,오버라이딩,상속, 트라이캐치,집합,Thread,스트림) 본문

국비지원(국비교육) 웹 개발자 과정

국비지원 JAVA(자바) 프로그래밍 (메서드호출,오버라이딩,상속, 트라이캐치,집합,Thread,스트림)

개린이9999 2022. 12. 9. 08:08
728x90

 

자바 연습문제

Mytv 라는 서브클래스에 메서드를 만들고 메인클래스에서 메서드 호출하여 코딩하기  

package 연습;

public class MyTv {
	boolean isPowerOn;
	int channel;
	int volume;
	final int MAX_VOLUME = 100;
	final int MIN_VOLUME = 0;
	final int MAX_CHANNEL = 100;
	final int MIN_CHANNEL = 1;

	void turnOnOff() {
// (1) isPowerOn의 값이 true면 false로, false면 true로 바꾼다 
		isPowerOn = !isPowerOn;
	}

	void volumeUp() {
// (2) volume의 값이 MAX_VOLUME보다 작을 때만 값을 1증가시킨다
		if (volume < MAX_VOLUME)
			volume++;
	}

	void volumeDown() {
		// (3) volume의 값이 MIN_VOLUME보다 클 때만 값을 1감소시킨다
		if (volume > MIN_VOLUME)
			volume--;

	}

	void channelUp() {
		// (4) channel의 값을 1증가시킨다
		// channel이 MAX_CHANNEL이면, channel의 값을 MIN_CHANNEL로 바꾼다
		if (channel == MAX_CHANNEL) {
			channel = MIN_CHANNEL;
		} else {
			channel++;
		}
	}

	void channelDown() {
		// (5) channel의 값을 1감소시킨다
		// channel이 MIN_CHANNEL이면, channel의 값을 MAX_CHANNE로 바꾼다
		if (channel == MIN_CHANNEL) {
			channel = MIN_CHANNEL;
		} else {
			channel--;
		}
	}
}

 

package 연습;

public class TvMain {

	public static void main(String[] args) {
		MyTv t = new MyTv();
		
		t.channel = 100;
		t.volume = 0;
		
		System.out.println("CH:"+t.channel+",VOL:"+t.volume);
	
	
		t.channelDown();
		t.volumeDown();
		System.out.println("CH:"+t.channel+",VOL"+t.volume);
	
		t.volume = 100;
		t.channelUp();
		t.volumeUp();
		System.out.println("CH:"+t.channel+",VOL:"+t.volume);
	}

}

1. 부모의 메서드와 이름이 같아야 한다 - O

2.매개변수의 수와 타입이 모두 같아야한다. -O

(매개변수의 개수랑 데이터타입이 다르면-> 오버로딩)

3. 접근 제어자는 부모의 메서드보다 좁은 범위로만 변경할 수 있다-X

반대!  부모클래스(메서드)->상속-> 자식클래스(메서드)  

Public->Protected->default->private

동일클래스내에서 오버라이딩을 하고싶으면 오버로딩도 같이 해야함

오버라이딩 하려면 상속받은 클래스에서만 할 수있음.

4. 부모의 메서드보다 더많은 수의 예외를 선언할 수 있다.-x

예외선언 try-catch 더많은 캐치를 쓸 수 있냐

부모보다 더많이 작성 못함!! 

이름 같음, 매개변수 같음, 리턴타입도 같아야함(기본조건) 


오버로딩: 위에 매개변수나 그런것들이 바뀜 (동일클래스에서 여러개 만들수있음) 

오버로딩예시

오버라이딩: 안에 내용물이 바뀜(동일클래스에서 여러개 못만듦) 

오버라이딩예시


 

 


 

 

 

 

 

 


 

 

package 자바연습;

public class Buyer {
	int money = 1000;
	Product[] cart = new Product[3]; // 구입한 제품 저장 배열
	int i = 0; // cart배열 변수에 사용될 인덱스

	void buy(Product p) {
//      1. 가진 돈과 물건의 가격을 비교해서 가진 돈이 적으면 메서드 종료
		if (money < p.price) {
			System.out.println("잔액이 부족하여 " + p + "를 살수 없습니다.");
			return;
		}
//      2. 가진 돈이 충분하면 제품의 가격을 가진 돈에서 뺌
		money = money - p.price;

//      3. 장바구니에 구입한 물건을 담는다 ( add메서드 호출 )
		add(p);
	}

	void add(Product p) {
//      1. i 값이 장바구니 크기보다 같거나 크면?
		if (i >= cart.length) {
//         1-1. 기존 장바구니보다 2배 큰 새로운 배열을 생성
			Product[] temp = new Product[cart.length * 2];
//         1-2. 기존 장바구니의 내용을 새로운 배열에 복사     
			System.arraycopy(cart, 0, temp, 0, cart.length);
//         1-3. 새로운 장바구니와 기존 장바구니를 교체
			cart = temp;
		}
//      2. 물건을 장바구니(cart)에 저장, 그리고 i 증가
		cart[i] = p;
		i++;
	}

	void summary() {
		int i;
		int sum = 0;
//      1. 장바구니에 담긴 물건의 목록을 만들어 출력
		for (i = 0; i < cart.length; i++) {
			System.out.print(cart[i] + ",");

//      2. 장바구니에 담긴 물건의 가격을 모두 더해서 출력
			sum = sum + cart[i].price;
		}
		System.out.println();
		System.out.println("사용한 금액 : " + sum);
//      3. 물건을 사고 남은 금액(돈)을 출력
		System.out.println("남은 금액 : " + money);
	}
}

 



트라이캐치 이용

try catch(트라이 캐치) 이용해서!! 

package 연습2;

import java.util.Scanner;

public class Sample02 {
	public static void main(String[] args) {
		// 1~100 사이의 임의의 값을 얻어서 answer에 저장한다
		int answer = (int) (Math.random() * 100) + 1;
		int input = 0; // 사용자입력을 저장할 공간
		int count = 0; // 시도횟수를 세기 위한 변수

		while (true) {
			count++;
			try {
				System.out.print("1과 100사이의 값을 입력하세요 :");
				input = new Scanner(System.in).nextInt();

				if (answer > input) {
					System.out.println("더 큰 수를 입력하세요.");

				} else if (answer < input) {
					System.out.println("더 작은 수를 입력하세요.");

				} else {
					System.out.println("맞췄습니다.");
					System.out.println("시도횟수는 " + count + "번입니다.");
					break;
				}
			} catch (Exception e) {
				System.out.println("다시 입력하세요");
			}
		}
	}
}


교집합,차집합,합집합

package 연습2;

import java.util.ArrayList;

public class Sample03 {

	public static void main(String[] args) {

		ArrayList<Integer> list1 = new ArrayList<Integer>();
		ArrayList<Integer> list2 = new ArrayList<Integer>();
		
		
		ArrayList<Integer> kyo = new ArrayList<>();	// 교집합
		ArrayList<Integer> cha = new ArrayList<>();	// 차집합
		ArrayList<Integer> hap = new ArrayList<>();	// 합집합

	list1.add(1);
	list1.add(2);
	list1.add(3);
	list1.add(4);
	
	list2.add(3);
	list2.add(4);
	list2.add(5);
	list2.add(6);
	
	// kyo: list1과 list2의 교집합 구하는 코드
	kyo.addAll(list1);
	kyo.retainAll(list2);
	// cha: list1과 list2의 차집합 구하는 코드
	cha.addAll(list1);
	cha.removeAll(list2);
	// hap: list1과 list2의 합집합구하는 코드
	hap.addAll(list1);
	hap.removeAll(list2);
	hap.addAll(list2);
	
	System.out.println("list1: "+list1);
	System.out.println("list2: "+list2);
	System.out.println("kyo : "+kyo);
	System.out.println("cha : "+cha);
	System.out.println("hap : "+hap);
	}

}

결과값



쓰레드(Thread) 

Thread 클래스를 상속

Runnable 인터페이스 상속(구현)

 

클래스 2개를 생성

Thread1-> Thread 클래스를 상속

Thread2-> Runnable 인터페이스 상속(구현)

 

각각 1~100까지 출력을 구현

 

두개의 쓰레디가 메인에서 실행까지 구현 되게끔! 

스레드 간단예시! 


 

.join(); Thread 끝날 때 까지 기다려주는 메서드

Thread, 컬렉션 프레임워크 사용하여 총 소요시간 줄이기.


 

728x90