| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 31 |
- 스프링
- MVC
- application.properties
- SpringBoot
- 바인딩변수
- @Valid
- springmvc
- 비즈니스레이어
- produces
- .xml
- gradle
- c:if
- Model
- jointpoint
- AOP
- @ResponseBody
- after-throwing
- @RequestParam
- @
- spring
- @RequestMapping
- 서비스레이어
- Java
- 유효성검사
- PointCut
- 생성자주입
- 어노테이션
- springjdbc
- frontController
- 의존주입
- Today
- Total
메모장
[멘토 씨리즈] 문제풀이 4 본문
추상클래스
- 다음 빈칸에 알맞은 단어를 작성해 보세요.
- 구현 내용이 없이 비어있는 메서드를 ( 추상메서드 ) (이)라고 부릅니다.
- 위 메서드를 선언 할때는 ( 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. 인터페이스를 사용함 으로써 다음과 같은 객체 지향의 특징을 가질수 있습니다. 각 용어의 개념에 대해 이해하고 있는 것을 간략히 서술해 보세요 .
- 정보 은닉 : 실제 구현 클래스의 내용을 전혀 보지 않고도 개발 코드로 객체를 사용 할 수 있다.
- 모듈화 : 구현 클래스 들이 독립적으로 구현되고 사용 될 수 있다. 개발 코드에서 객체 변경이 필요할때 , 개발 코드의 수정을 최소화 할 수 있다.
예외처리
- 다음코드는 컴파일 오류가 발생합니다. 오류를 확인하고 예외 처리 문법을 사용하여 해결해 보세요.
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)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 객체를 저장하는 구조를 가지고 있다.
'JAVA > [멘토씨리즈]' 카테고리의 다른 글
| [멘토 씨리즈] 부록 01.데이터베이스와 DBMS (0) | 2024.04.09 |
|---|---|
| [멘토 씨리즈] 문제풀이 5 (0) | 2024.04.09 |
| [멘토 씨리즈] 파일 입출력 (0) | 2024.04.09 |
| [멘토 씨리즈] 스레드 (0) | 2024.04.09 |
| [멘토씨리즈] 컬렉션 프레임 워크 (0) | 2024.04.09 |