Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
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
Archives
Today
Total
관리 메뉴

브래의 슬기로운 코딩 생활

JAVA 프로그래밍 중간고사 정리 본문

2-1/JAVA 프로그래밍

JAVA 프로그래밍 중간고사 정리

김브래 2023. 4. 29. 17:36

2023 Java 중간 테스트

▪ 오픈페이퍼
• 자필로 작성
✓보고서 점수 부여 예정으로 알아볼 수 있게 작성
• 분량은 A4 양면 2장(단면 4장)

 

1교시 이론 (교재 7장)

1. WORA에 대하여 설명하시오.
2. 어휘의 종류는?
3. 변수, 상수변수, 리터럴의 차이점은?
4. 자바 자료형을 분류하시오.
5. 기본형 형변환에 대하여 설명하시오.
6. 지역변수, 인스턴스변수, 클래스변수의 차이점은?
7. 자바 배열에 대하여 설명하시오.
8. ==, equals, instanceof 연산자의 차이점은?
9. if ~ else if 구문과 switch 차이점은?
10. for, forEach 문의 차이점은? 
11. 상속에 대하여 설명하시오.
12. 일반적인 클래스의 상세 구성은?
13. 객체 생성과 사용 과정을 예를 들어 설명하시오.
14. getter/setter 메소드에 대하여 설명하시오.
15. 접근 권한에서 디폴트와 protected를 비교하시오.
16. super와 this의 공통점과 차이점을 설명하시오.
17. 재정의와 중첩에 대하여 설명하시오.
18. 추상클래스와 인터페이스의 공통점, 차이점을 설명하시오.
19. 다형성에 대하여 예를 들어 설명하시오.
20. package, import 에 대하여 설명하시오.

 

 

1. WORA에 대하여 설명하시오.

Write Once, Run Anywhere는 플랫폼에 상관없이 독립적으로 하나의 자바 소스와 하나의 자바 컴파일러를 통해 코드를 실행 시킬 수 있다는 뜻이다.

 

2. 어휘의 종류는?

자바에서 어휘는 크게 시스템 정의 어휘와 사용자 정의 어휘가 있는데, 시스템 정의 어휘에는 예약어, 연산자, 구분자, 주석이 있고 사용자 정의 어휘에는 식별자, 리터럴이 있다

 

3. 변수, 상수변수, 리터럴의 차이점은?

변수는 값을 저장하기 위한 메모리 공간의 이름이고 선언할 때 데이터 타입을 지정 해야 한다.

상수변수는 값을 변경할 수 없는 변수이고 final 키워드를 사용하여 선언한다.

리터럴은 코드에 직접 입력된 값을 의미하고 변수나 상수 변수에 저장할 수 있다.

 

4. 자바 자료형을 분류하시오.

자바의 자료형은 기본형과 참조형이 있다. 기본형은 정수형, 실수형, 문자형, 논리형이 있고 참조형에는 배열 형, 클래스 형, 인터페이스 형, 열거형이 있다

 

5. 기본형 형변환에 대하여 설명하시오.

기본형의 형변환은 프로그래머가 지정하여 형변환을 수행하는 명시적 형 변환과 컴파일러가 수행하는 형변환인 묵시적 형변환이 있다.

 

6. 지역변수, 인스턴스변수, 클래스변수의 차이점은?

지역변수는 메소드나 블록 내에서 선언되고 해당 메소드나 블록 안에서만 사용이 가능하다.

인스턴스 변수는 클래스 내에서 선언되고 클래스의 객체마다 값을 가질 수 있는 변수이다.

클래스 변수는 클래스 내에서 static 키워드를 사용하여 선언되고 모든 객체가 공유하는 변수 이다.

 

7. 자바 배열에 대하여 설명하시오.

배열은 동일한 자료형을 갖는 원소들의 모임으로, 생성될 때 크기가 정해지고 인덱스를 통해 접근한다.

 

8. ==, equals, instanceof 연산자의 차이점은?

== 연산자: 두 객체가 같은 객체인지(메모리 주소가 같은지) 비교하는 연산자이다.

equals() 메서드: 두 객체가 논리적으로 같은지(객체가 가지고 있는 값이 같은지) 비교하는 메서드이다.

instanceof 연산자: 객체가 특정 클래스나 인터페이스의 인스턴스인지 검사하는 연산자이다.

 

9. if ~ else if 구문과 switch 차이점은?

if-else if 구문: 조건의 수가 적거나 조건의 범위가 넓은 경우에 사용된다.

switch 구문: 이 구문은 조건이 변수의 값에 따라 구분되는 경우에 사용된다.

 

10. for, forEach 문의 차이점은?

for: 초기식, 조건식, 증감식을 사용하여 반복문을 수행하고, 반복 횟수를 지정할 수 있다.

forEach: 배열, 리스트와 같은 컬렉션의 모든 요소를 반복하면서 요소의 값을 가져와서 사용하는 경우에 사용된다.

forEach문은 인덱스를 사용하여 요소에 접근할 수 없으며, 반복을 중간에 멈출 수 없다. 이에 비해 for문은 인덱스를 사용하여 요소에 접근할 수 있으며, 반복을 중간에 멈출 수 있다

 

11. 상속에 대하여 설명하시오.

상속은 기존의 클래스가 가지고 있는 변수와 메소드를 기반으로 필요한 변수와 메소드를 추가하거나 기존 메소드를 수정하여 새로운 클래스를 정의하는 것이다. 기존 메소드의 수정을 재정의(overriding)라고 한다.

 

12. 일반적인 클래스의 상세 구성은?

[<classModifiers>] class <ClassName>

[extends <SuperclassName>] (수퍼클래스 상속 / 단일 상속)

[implements <InterfaceName1>, ] (인터페이스 상속 / 다중 상속 가능)

{

// instance variable declarations (인스턴스 변수 선언)

[<fieldModifier>] <variableDeclarations>

// methods declarations (메소드 선언)

[<methodModifier>] <methodDeclarations>

{ <methodBody> }

}

 

13. 객체 생성과 사용 과정을 예를 들어 설명하시오.

public class MyClass {

int myField; // 인스턴스 변수 정의

public int myMethod(int num) { // 메서드 정의

return myField + num;

}

}

MyClass myObj = new MyClass(); // 객체 생성

myObj.myField = 10; // 인스턴스 변수 값 설정

int result = myObj.myMethod(5); // 메서드 호출

 

14. getter/setter 메소드에 대하여 설명하시오.

getter/setter 메소드는 객체의 필드 값을 읽거나 수정하는 기능을 한다.

 

15. 접근 권한에서 디폴트와 protected를 비교하시오.

default: 같은 패키지 내에서만 접근이 가능하다. 접근 제어자를 명시하지 않은 경우에는 default 접근 제어자가 적용됩니다.

protected: 같은 패키지 내에서는 물론 자식 클래스에서도 접근이 가능하다.

 

16. superthis의 공통점과 차이점을 설명하시오.

공통점: 둘 다 객체를 가리키는 키워드이다. / 둘 다 생성자에서 사용할 수 있다.

 

차이점:super는 부모 클래스를 가리키는 키워드이다. super 키워드를 사용하면, 부모 클래스의 필드나 메소드에 접근할 수 있다. 또한 super()를 사용하여 부모 클래스의 생성자를 호출할 수 있다.

this는 현재 객체를 가리키는 키워드이다. this 키워드를 사용하면, 현재 객체의 필드나 메소드에 접근할 수 있다. 또한 this()를 사용하여 같은 클래스 내의 다른 생성자를 호출할 수 있다.

 

17. 재정의와 중첩에 대하여 설명하시오.

시그니쳐(signature): 메소드 이름, 매개변수 개수, 매개변수 유형

재정의(overriding): 수퍼 클래스의 메소드와 시그니쳐가 같은 메소드를 만드는 것 (서브 클래스로부터 생성된 객체는 재정의한 수퍼 클래스의 메소드를 접근할 수 없음)

중첩(overloading): 메소드 이름은 같고 나머지 시그니쳐가 다른 메소드를 만드는 것 (메소드 선언과 동일한 작업이고, 시그니쳐가 다른 경우, 반환 유형이 달라져도 됨)

 

18. 추상클래스와 인터페이스의 공통점, 차이점을 설명하시오.

공통점: 추상 클래스와 인터페이스는 모두 추상화를 통해 다형성을 구현하는데 사용된다. 둘 다 객체 생성이 불가능하며, 하위 클래스에서 추상 메소드를 구현해야 한다.

 

차이점: 추상 클래스는 일반 클래스이며, 추상 메소드를 포함할 수 있고 인스턴스 변수와 일부 구현을 가질 수 있지만, 인터페이스는 추상 메소드와 상수 필드만을 가질 수 있다. 추상 클래스는 상속을 통해 재사용할 수 있고 인터페이스는 구현을 통해 사용할 수 있다.

추상 클래스는 다른 클래스와 함께 사용될 목적으로 설계되고 인터페이스는 클래스의 행동을 정의하기 위한 목적으로 설계된다.

 

19. 다형성에 대하여 예를 들어 설명하시오.

다형성(Polymorphism)이란 같은 코드에서 여러 가지 다른 동작을 수행할 수 있는 능력을 말한다.

public class Animal {

public void makeSound() {

System.out.println("Animal is making a sound");

}

}

public class Dog extends Animal {

@Override

public void makeSound() {

System.out.println("Woof!");

}

}

public class Cat extends Animal {

@Override

public void makeSound() {

System.out.println("Meow!");

}

}

Animal dog = new Dog();

Animal cat = new Cat();

 

dog.makeSound(); // "Woof!"

cat.makeSound(); // "Meow!"

이처럼, 같은 부모 클래스를 상속받고 같은 메소드를 가지고 있지만, 각자 다른 구현을 갖춘 클래스들이 존재함으로써 다형성을 구현할 수 있다.

 

20. package, import에 대하여 설명하시오.

패키지는 클래스들을 그룹화하는 방법이며, import는 다른 패키지에 속한 클래스를 현재 클래스에서 사용할 수 있도록 해주는 방법이다.

 

2교시

5명의 학번,이름, 성적을 입력받고, 학생별 과목별 성적, 합계, 평균을 출력한다.

 

- ArrayList, Scanner Class 활용
- generate 메뉴의 Getter/Setter, Constructor 활용

 

Student Class{

private Long hakbun;
Long getHakbun();
void setHakbun(Long hakbun)
private String name;
private Grade grade;

}

 

Grade Class{
private Double korean;
private Double math;
private Double physics;

public Double calcSum();

public Double calcAverage();

}

 

StudentGradeTest Class{
public static void main(String[] 
args) {
}

}

 

package idusw.java.Student;

import java.util.ArrayList;

import java.util.Scanner;

 

public class StudentGradeTest {

public static void main(String[] args) {

ArrayList<Student> students =new ArrayList<>();

Scanner scanner =new Scanner(System.in);

for (int i =0; i <5; i++) {

System.out.println((i +1) +"번째 학생의 정보를 입력하세요:");

Student student =new Student();

System.out.print("학번: ");

student.setHakbun(scanner.nextLong());

System.out.print("이름: ");

student.setName(scanner.next());

Grade grade =new Grade();

System.out.print("국어: ");

grade.setKorean(scanner.nextDouble());

System.out.print("수학: ");

grade.setMath(scanner.nextDouble());

System.out.print("영어: ");

grade.setPhysics(scanner.nextDouble());

student.setGrade(grade);

students.add(student);

}

for (Student student : students) {

System.out.println(student.getName() +" 의 학번: "+ student.getHakbun());

System.out.println("국어: "+ student.getGrade().getKorean());

System.out.println("수학: "+ student.getGrade().getMath());

System.out.println("영어: "+ student.getGrade().getPhysics());

System.out.println("합계: "+ student.getGrade().calcSum());

System.out.println("평균: "+String.format("%.2f",student.getGrade().calcAverage()));

System.out.println();

}

scanner.close();

}

}

-------------------------------------------------------------------

package idusw.java.Student;

 

class Grade {

private Double korean;

private Double math;

private Double physics;

public Double getKorean() {

return korean;

}

public void setKorean(Double korean) {

this.korean = korean;

}

public Double getMath() {

return math;

}

public void setMath(Double math) {

this.math = math;

}

public Double getPhysics() {

return physics;

}

public void setPhysics(Double physics) {

this.physics = physics;

}

public Double calcSum() {

return korean + math + physics;

}

public Double calcAverage() {

return (korean + math + physics) /3;

}

}

-------------------------------------------------------------------

package idusw.java.Student;

 

public class Student {

private Long hakbun;

private String name;

private Grade grade;

public Long getHakbun() {

return hakbun;

}

public void setHakbun(Long hakbun) {

this.hakbun = hakbun;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Grade getGrade() {

return grade;

}

public void setGrade(Grade grade) {

this.grade = grade;

}

}

3교시

구구단을 출력하는 프로그램을 작성하시오.


Main Class : GugudanTest.java
- GugudanSub 클래스로 부터 객체를 생성
- 지정한 단만 출력
- 모든 단 출력
- 지정한 행 수로 모든 단 출력


Super Class : GugudanSuper.java
- printDan(int dan) : 지정한 단을 출력한다.
- printAll() : 2 ~ 9 단을 출력한다.

 

Sub Class : GugudanSub.java
- GugudanSuper 클래스를 상속받아 구현한다.
- printAll(int rows) : 지정한 row 수로 출력한다. 
- rows 1 ~ 8 만 가능함, 아닌 경우 오류
- 8인 경우 printAll()과 동일함
- 3인 경우 3행으로 출력 2-4, 5-7, 8-9로 출력

 

package idusw.java.Gugudan;

 

public class GugudanSuper {

public void printDan(int dan) {

System.out.println("=== "+ dan +"===");

for (int i =1; i <=9; i++) {

System.out.println(dan +" x "+ i +" = "+ dan * i);

}

}

public void printAll() {

for (int i =2; i <=9; i++) {

System.out.println("=== "+ i +"===");

for (int j =1; j <=9; j++) {

System.out.println(i +" x "+ j +" = "+ i * j);

}

}

}

}

------------------------------------------------------------------------------

package idusw.java.Gugudan;

 

public class GugudanSub extends GugudanSuper {

public void printAll(int rows) {

if (rows==8) {

super.printAll();

}else{

for (int i =1; i <=9; i++) {

for (int j =2; j <=9; j += rows) {

for (int k = j; k < j + rows && k <=9; k++) {

System.out.print(k +" x "+ i +" = "+ k * i +"\t");

}

System.out.print("\t");

}

System.out.println();

}

}

}

}

------------------------------------------------------------------------------

package idusw.java.Gugudan;

import java.util.Scanner;

public class GugudanTest {

public static void main(String[] args) {

GugudanSub gugudan =new GugudanSub();

Scanner sc =new Scanner(System.in);

System.out.print("출력할 단을 입력하세요: ");

int dan = sc.nextInt();

gugudan.printDan(dan);

System.out.println("\n모든 단을 출력합니다.");

gugudan.printAll();

System.out.print("\n한 줄에 출력할 단의 수를 입력하세요: ");

int rows = sc.nextInt();

if(rows<1||rows>8){

System.out.println("오류");

}else {

gugudan.printAll(rows);

}

sc.close();

}

}