메모장

[멘토 씨리즈] 문제풀이 4 본문

JAVA/[멘토씨리즈]

[멘토 씨리즈] 문제풀이 4

Itchild 2024. 4. 9. 13:24
728x90
반응형

 

 

추상클래스

 

  1. 다음 빈칸에 알맞은 단어를 작성해 보세요.
  • 구현 내용이 없이 비어있는 메서드를 ( 추상메서드 ) (이)라고 부릅니다.
  • 위 메서드를 선언 할때는 ( abstract ) 키워드를 사용해야 합니다.
  • 이러한 메서드를 1개 이상 가지고 잇는 클래스를 ( 추상 ) 클래스 라고 부릅니다.

 

2. 다음 코드는 컴파일 에러가 발생합니다. 컴파일 에러가 발생하는곳을 모두 찾아 수정 해 보세요 .

package section12;

abstract class Bike {
	int wheel;
	
	Bike(int wheel){
		this.wheel = wheel;
	}
	
	void info() {
		System.out.println("이 자전거는 " + wheel + "발 자전거입니다.");
	}
}


class ChildBike extends Bike{
	ChildBike(int wheel){
        정답 :  상속받는 부모클래스의 생성자 초기화가 안되어있다 !
         super(wheel);  ------> 써줘야 한다.
	}
}

class PRACTICE_12_02{
	public static void main(String[] args) {
		Bike b = new Bike(2); -----> 정답 : Bike는 추상클래스라서 객체를 생성할 수 없다 !!
		
		ChildBike cb = new ChildBike(4);
		cb.info();
	}
}
 

3. 다음문장이 맞으면 o표, 틀리면 x표 하세요

  • 추상클래스는 자식클래스들이 상속(extends)받아 구현합니다.( o )
  • 인터페이스는 다른 클래스 코드들과의 사이에서 중간 매개체 역할을 합니다.( o )
  • 인터페이스 안에서 상수를 선언할때 , final을 명시하지 않으면 syntax error가 발생한다.( x )
  • 추상클래스와 인터페이스의 추상 메서드는 구현부가 있으면 안됩니다.( o )
  • 클래스 간 다중상속이 불가능한 것처럼 인터페이스도 다중 상속이 불가능합니다.( x )

 

4. 2번 예제 코드에서 Bike클래스 안에 아래 메서드를 추가했습니다. ChildBike 클래스를 어떻게 수정해야 할까?

abstract int getWheel();

추상클래스를 상속받은 모든 자식 클래스는 반드시 추상 메서드를 오버라이딩 및 재정의 하여 구현해야 한다!!
-> 그렇지 않으면 컴파일 에러가 발생한다. 
따라서 ChildBike 클래스에도 int getWheel(); 메서드를 오버라이딩 해놓는다 !
 

▶ 추상 클래스와 메서드를 사용하는 이유

  • 자식 클래스 간의 공통적인 필드와 메서드 이름을 통일 할 수 있다.
  • 반드시 구현해야 하는 메서드를 선언함 으로써 공통 규격을 제공한다.

 

5. 인터페이스를 사용함 으로써 다음과 같은 객체 지향의 특징을 가질수 있습니다. 각 용어의 개념에 대해 이해하고 있는 것을 간략히 서술해 보세요 .

  • 정보 은닉 : 실제 구현 클래스의 내용을 전혀 보지 않고도 개발 코드로 객체를 사용 할 수 있다.

 

  • 모듈화 : 구현 클래스 들이 독립적으로 구현되고 사용 될 수 있다. 개발 코드에서 객체 변경이 필요할때 , 개발 코드의 수정을 최소화 할 수 있다.

 

예외처리

 

  1. 다음코드는 컴파일 오류가 발생합니다. 오류를 확인하고 예외 처리 문법을 사용하여 해결해 보세요.
package section12;

public class ValueExceptionExample{
	public static void main(String[] args) {
		
		
		int data = 10;
		double result = 0;
		
		result = (double)data / 0;
		
		System.out.println("결과는  : " + result);
	}
}
 
package section12;

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


		int data = 10;
		double result = 0;

		try {
			result = (double)data / 0;
			System.out.println("결과는  : " + result);
		} catch (Exception e) {
			System.out.println("0으로는 나눌 수 없습니다.");
		}

	}
}
// 결과적으로 double 타입으로 형변환해서 오류는 안나지만 int data라고 가정한다면 data를 0으로
나눌 수 없기 때문에 그 부분에 try-catch문으로 잡아준다.
 

 

 

2. 다음 코드에서 사용자가 음수를 입력할 경우 임의로 예외를 발생시켜 음수의 값을 합산에 포함되지 않도록 처리해보세요

package section12;

import java.util.Scanner;

public class MinusValueExceptionExample{
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int count = 5; <----- ? 5 이면 while문을 들어갈 수가 없어서 돌지 않음 ,,,
		int data = 0;
		int sum = 0;
		while(count<5) {
			System.out.println("숫자를 입력하세요");
			data = scan.nextInt();
			sum += data;
		}

		System.out.println("숫자 합 : "+ sum);
	}
}
 
package section12;

import java.util.Scanner;

public class MinusValueExceptionExample{
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int count = 0;
		int data = 0;
		int sum = 0;


		while(count<5) {
			try {
				System.out.println("숫자를 입력하세요");
				data = scan.nextInt();
				if(data < 0) {
					throw new Exception("음수는 포함하지 않습니다."); 
				}
				count++;
				sum += data;
			}
			catch (Exception e) {
				
				System.out.println("에러 : " + e.getMessage());
			}
		}

		System.out.println("숫자 합 : "+ sum);
	}
}
 

컬렉션 프레임워크

 

  1. 다음중 컬렉션의 설명으로 틀린것은 무엇입니까 ?

1)List 컬렉션은 index로 객체를 관리하며 중복 저장을 허용합니다.

2)Set 컬렉션은 순서를 유지하지 않으며 중복저장을 허용하지 않습니다.

3)Map 컬렉션은 key와 value로 구성된 Map,Entry를 저장합니다.

4)LinkedList는 List 컬렉션과 동일하게 index로 객체를 관리합니다. // node라는 객체를 생성하여 인접 데이터를 링크해서 체인처럼 관리한다.

 

2. 다음 빈칸에 알맞은 코드를 작성해 보세요

package section16;


public class PRACTICE_16_02{
	public static void main(String[] args) {
		List ( <Integer> ) list = new ArrayList<>();
		// 제네릭을 써준다 ! 정수이므로 <Integer> 
		list.add(1);
		list.add(2);
		list.add(3);
		list.add(4);
		list.add(5);
		
		for (int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i));
		}
	}
}
 

3. 다음중 Set 컬렉션에 대한 설명으로 틀린것은 무엇입니까 ?

1) 대표적인 구현 클래스로는 HashSet, LinkedHashSet, TreeSet이 있습니다.

2) Set 컬렉션에서 객체를 하나씩 꺼내오고 싶다면 Iterator를 이용합니다

3) HashSet은 hashCode()와 equals()를 이용해 중복된 객체를 판별합니다.

4) Set 컬렉션에는 null을 저장할 수 없습니다. // 객체를 중복해서 저장할 수 없고 하나의 null만 저장할 수 있다.

 

4. 랜덤함수를 사용해 리스트 컬렉션에 10개의 숫자를 입력한 후 입력된 숫자 중에서 짝수의 합을 구하여 출력해보세요

package section16;

import java.util.Iterator;
import java.util.List;

public class ArrayListSumExample {
	public static void main(String[] args) {
		List<Integer> list = new ArrayList<>();
		
		for (int i = 0; i < 10; i++) {
			list.add(i);
		}

		int sum = 0;
		for (int i = 0; i < list.size(); i++) {
			Random rand = new Random();
            int num = rand.next 
		}
		System.out.println("짝수의 합 : " + sum);
	}
}
 
package section12;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class ArrayListSumExample {
	public static void main(String[] args) {
		List<Integer> list = new ArrayList<>();
		
		int num = 0;
		for (int i = 0; i < 10; i++) {
			Random rand = new Random();
			num = rand.nextInt(10);  // 문제에서 랜덤숫자의 범위는 알 수 없으므로 
                                     // 랜덤을 이용해 숫자를 0~9까지 중으로 가정 
			list.add(num); // 차곡차곡 추가한다. 10개의 숫자를 
		}
		System.out.println(list); // 잘 추가되었는지 확인용 출력

		int sum = 0; // 합계를 담을 변수 
		for (int i = 0; i < list.size(); i++) { // 생성한 10개의 숫자 공간만큼
			if(list.get(i) % 2 == 0) { // 리스트에 있는 번호가 짝수니?
				sum += list.get(i); // 그러면 합계에 더해줘
			}
		}
		System.out.println("짝수의 합 : " + sum); // 짝수의 합 출력 !
	}
}
 

5. 주머니에는 파란색, 빨간색 , 검은색 공이 모두 10개 들어있다. 각각의 색깔을 지닌 공이 몇개씩 들어있는지 Map 컬렉션을 사용하여 출력해보세요

package section16;

public class PRACTICE_16_05 {
	public static void main(String[] args) {
		String[] balls = {"빨간색", "파란색", "검은색", "검은색", "빨간색", "파란색",
				"빨간색","빨간색", "파란색","검은색"};
		
		Map<String, Integer> map = new HashMap<>();
		for (String ball : balls) {
			// 코드를 입력하세요 
		}
		// 출력코드를 입력하세요 
	}                                                                      실행결과
}                                                                          빨간색:4개
                                                                           파란색:3개
                                                                           검은색:3개
 
package section12;

import java.util.HashMap;
import java.util.Map;

public class PRACTICE_16_05 {
	public static void main(String[] args) {
		String[] balls = {"빨간색", "파란색", "검은색", "검은색", "빨간색", "파란색",
				"빨간색","빨간색", "파란색","검은색"};
		
		Map<String, Integer> map = new HashMap<>();
		for (String ball : balls) {
			// 코드를 입력하세요 // ball 을 어떻게 활용할수 있을까 좀 더 고민해보자
			map.put("빨간색", 4);
			map.put(ball, 3);
			map.put(ball, 3);
		}
		// 출력코드를 입력하세요 
		System.out.println("빨간색 : " + map.get("빨간색") + "개");
		System.out.println("파란색 : " + map.get("파란색") + "개");
		System.out.println("검은색 : " + map.get("검은색") + "개");
	}
}
 

6. 다음 빈칸에 알맞은 단어를 작성해보세요

  • 데이터를 다룰때 사용되는 주요 자료 구조를 ( 컬렉션 프레임워크 ) 라고 한다.
  • 저장순서가 유지되지 않으며 , 객체를 중복해서 저장할 수 없고 하나의 null만 저장할 수 있는 ( set )컬렉션이 있다.
  • Map컬렉션은 ( key ) 와 ( value ) 으로 구성된 Map.Entry 객체를 저장하는 구조를 가지고 있다.

 

728x90
반응형