java 20

산야(Sanya)·2024년 1월 24일

java 족보

목록 보기
22/28

1. try with resource 에 대하여 설명하시오.

Try-with-resources는 자바에서 ‘AutoCloseable’ 인터페이스를 구현하는 객체들을 자동으로 닫아주는 구문입니다. 이는 개발자가 명시적으로 자원을 해제하는 번거로움을 줄여주며, 예외 발생 시에도 안전하게 자원을 해제할 수 있도록 도와줍니다. 이 기능은 자바 7부터 소개되었으며, 코드를 더 깔끔하고 안전하게 만드는 데 큰 도움이 됩니다. 특히 파일 입출력, 데이터베이스 연결과 같은 자원을 사용할 때 이 기능의 중요성이 더욱 부각됩니다.

2. 래퍼 클래스(Wrapper class)란 무엇인가?

래퍼 클래스(Wrapper class) 는 기본 자료형(primitive type)을 객체로 다루기 위해서 사용하는 클래스들을 말합니다. 자바는 모든 기본타입(primitive type)은 값을 갖는 객체를 생성할 수 있습니다. 이런 객체를 포장 객체라고도 하는데 그 이유는 기본 타입의 값을 내부에 두고 포장하기 때문입니다. 래퍼 클래스로 감싸고 있는 기본 타입 값은 외부에서 변경할 수 없습니다. 만약 값을 변경하고 싶다면 새로운 포장 객체를 만들어야 합니다.

3.박싱 & 언박싱에 대하여 설명하시오.

박싱(Boxing) 은 프리미티브 타입의 값을 “Wrapper” 클래스로 바꿔주는 과정을 의미합니다. 예를 들어, int 타입의 값을 Integer 클래스로 바꾸는 것이 박싱입니다. 반대로, 언박싱(Unboxing) 은 “Wrapper” 클래스 타입의 값을 프리미티브 타입으로 바꿔주는 과정을 의미합니다. 예를 들어, Integer 클래스의 값을 int 타입으로 바꾸는 것이 언박싱입니다.

4. 문자열을 입력 받아 한 글자씩 회전시켜 모두 출력하는 프로그램을 작성하라.

(클래스로 작성할 필요없이 메인에서 직접 할것)

[Hint] Scanner.nextLine()을 이용하면 빈칸을 포함하여 한 번에 한 줄을 읽을 수 있다.

문자열을 입력하세요. 빈칸이나 있어도 되고 영어 한글 모두 됩니다.

I Love you

Love youI

Love youI

ove youI L

ve youI Lo

e youI Lov

youI Love

youI Love

ouI Love y

uI Love yo

I Love you

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("문자열을 입력하세요. 빈칸이나 있어도 되고 영어 한글 모두 됩니다.");
        String input = scanner.nextLine();
        String original = input;
        do {
            System.out.println(input);
            input = input.substring(1) + input.charAt(0);
        } while (!input.equals(original));
    }
}

5. 아래를 프로그래밍 하시오.

  • 클래스 Person
  • 필드 : 이름, 나이, 주소 선언
  • 클래스 Student
  • 필드 : 학교명, 학과, 학번, 8개 평균평점을 저장할 배열로 선언

  • 생성자 : 학교명, 학과, 학번 지정

  • 메소드 average() : 8개 학기 평균평점의 평균을 반환

  • 클래스 Person과 Student

  • 프로그램 테스트 프로그램의 결과 : 8개 학기의 평균평점은 표준입력으로 받도록한다.

이름 : 김다정

나이 : 20

주소 : 서울시 관악구

학교 : 동양서울대학교

학과 : 전산정보학과

학번 : 20132222


8학기 학점을 순서대로 입력하세요

1학기 학점 → 3.37

2학기 학점 → 3.89

3학기 학점 → 4.35

4학기 학점 → 3.76

5학기 학점 → 3.89

6학기 학점 → 4.26

7학기 학점 → 4.89

8학기 학점 → 3.89


import java.util.Scanner;

class Person {
	String name;
	int age;
	String address;
}

class Student extends Person {
	String schoolName;
	String department;
	String studentId;
	double[] grades = new double[8];

	Student(String schoolName, String department, String studentId) {
		this.schoolName = schoolName;
		this.department = department;
		this.studentId = studentId;
	}

	double average() {
		double sum = 0;
		for (double grade : grades) {
			sum += grade;
		}
		return sum / grades.length;
	}
}

public class Wrapper2 {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		Student student = new Student("동양서울대학교", "전산정보학과", "20132222");
		student.name = "김다정";
		student.age = 20;
		student.address = "서울시 관악구";

		System.out.println("8학기 학점을 순서대로 입력하세요");
		for (int i = 0; i < student.grades.length; i++) {
			System.out.println((i + 1) + "학기 학점 → ");
			student.grades[i] = scanner.nextDouble();
		}

		System.out.println("이름 : " + student.name);
		System.out.println("나이 : " + student.age);
		System.out.println("주소 : " + student.address);
		System.out.println("학교 : " + student.schoolName);
		System.out.println("학과 : " + student.department);
		System.out.println("학번 : " + student.studentId);
		System.out.println("평균 학점 : " + student.average());
	}
}

6. BigInteger 클래스에 대하여 설명하시오.

BigInteger 클래스는 Java에서 매우 큰 정수를 정확하게 표현할 수 있는 클래스입니다. 이 클래스는 int나 long의 범위를 초과하는 정수 연산을 지원합니다. BigInteger 클래스는 임의의 정밀도를 가지는 정수를 표현하며, 메모리가 동적으로 할당되기 때문에 얼마나 많은 수를 저장할 수 있는지에 대한 이론적인 제한은 없습니다. 실제로 메모리는 제한되어 있으며 Integer.MAX_VALUE 보다 작거나 같은 비트 수를 가진 정수를 저장할 수 있습니다. 이 클래스는 java.lang.Math 패키지의 모든 메소드와 Java의 모든 기본 정수 연산자에 대한 아날로그를 제공합니다. 또한, 모듈러 산술 연산, 비트 조작, 최대 공약수(GCD) 계산 등과 같은 연산을 다룹니다.

7.아래의 문자열을 ":" 구분자로 하여, PM 08 45 를 차례로 출력하는 프로그램을 작성 하시오.

import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) {
        StringTokenizer st = new StringTokenizer("PM:08:45", ":");

        while (st.hasMoreTokens()) {
            System.out.println(st.nextToken());
        }
    }
}

"PM:08:45"

8.Random rand = new Random(); 과 Random rand2 = new Random(1); 차이를 설명하시오.

Random rand = new Random();Random rand2 = new Random(1);의 차이는 종자값(seed)에 있습니다. new Random()은 현재 시간을 기반으로 종자값을 생성하므로, 프로그램을 실행할 때마다 다른 난수를 생성합니다. 반면, new Random(1)은 종자값을 1로 설정하므로, 프로그램을 실행할 때마다 같은 난수를 생성합니다.

9. 아래를 @로 구분하시오.

import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) {
        StringTokenizer st = new StringTokenizer("inpa@tistory@com@super@power", "@");

        while (st.hasMoreTokens()) {
            System.out.println(st.nextToken());
        }
    }
}

String str = "inpa@tistory@com@super@power";

10. 아래가 long 의 min 값이 되는 원리를 설명하시오.

System.out.println(Long.MAX_VALUE + 1);

System.out.println(Long.MAX_VALUE + 1);Long.MIN_VALUE를 출력하는 원리는 정수 오버플로우 때문입니다. Long.MAX_VALUE9223372036854775807이고, 이 값에 1을 더하면 정수의 최대 범위를 초과하여 오버플로우가 발생합니다. 이 경우, 값은 최소값인 -9223372036854775808로 돌아갑니다. 이것은 컴퓨터에서 정수를 표현하는 방식에 기인한 현상입니다.

profile
개발일지

0개의 댓글