Try-with-resources는 자바에서 ‘AutoCloseable’ 인터페이스를 구현하는 객체들을 자동으로 닫아주는 구문입니다. 이는 개발자가 명시적으로 자원을 해제하는 번거로움을 줄여주며, 예외 발생 시에도 안전하게 자원을 해제할 수 있도록 도와줍니다. 이 기능은 자바 7부터 소개되었으며, 코드를 더 깔끔하고 안전하게 만드는 데 큰 도움이 됩니다. 특히 파일 입출력, 데이터베이스 연결과 같은 자원을 사용할 때 이 기능의 중요성이 더욱 부각됩니다.
래퍼 클래스(Wrapper class) 는 기본 자료형(primitive type)을 객체로 다루기 위해서 사용하는 클래스들을 말합니다. 자바는 모든 기본타입(primitive type)은 값을 갖는 객체를 생성할 수 있습니다. 이런 객체를 포장 객체라고도 하는데 그 이유는 기본 타입의 값을 내부에 두고 포장하기 때문입니다. 래퍼 클래스로 감싸고 있는 기본 타입 값은 외부에서 변경할 수 없습니다. 만약 값을 변경하고 싶다면 새로운 포장 객체를 만들어야 합니다.
박싱(Boxing) 은 프리미티브 타입의 값을 “Wrapper” 클래스로 바꿔주는 과정을 의미합니다. 예를 들어, int 타입의 값을 Integer 클래스로 바꾸는 것이 박싱입니다. 반대로, 언박싱(Unboxing) 은 “Wrapper” 클래스 타입의 값을 프리미티브 타입으로 바꿔주는 과정을 의미합니다. 예를 들어, Integer 클래스의 값을 int 타입으로 바꾸는 것이 언박싱입니다.
(클래스로 작성할 필요없이 메인에서 직접 할것)
[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));
}
}
필드 : 학교명, 학과, 학번, 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());
}
}
BigInteger 클래스는 Java에서 매우 큰 정수를 정확하게 표현할 수 있는 클래스입니다. 이 클래스는 int나 long의 범위를 초과하는 정수 연산을 지원합니다. BigInteger 클래스는 임의의 정밀도를 가지는 정수를 표현하며, 메모리가 동적으로 할당되기 때문에 얼마나 많은 수를 저장할 수 있는지에 대한 이론적인 제한은 없습니다. 실제로 메모리는 제한되어 있으며 Integer.MAX_VALUE 보다 작거나 같은 비트 수를 가진 정수를 저장할 수 있습니다. 이 클래스는 java.lang.Math 패키지의 모든 메소드와 Java의 모든 기본 정수 연산자에 대한 아날로그를 제공합니다. 또한, 모듈러 산술 연산, 비트 조작, 최대 공약수(GCD) 계산 등과 같은 연산을 다룹니다.

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"
Random rand = new Random();와 Random rand2 = new Random(1);의 차이는 종자값(seed)에 있습니다. new Random()은 현재 시간을 기반으로 종자값을 생성하므로, 프로그램을 실행할 때마다 다른 난수를 생성합니다. 반면, new Random(1)은 종자값을 1로 설정하므로, 프로그램을 실행할 때마다 같은 난수를 생성합니다.
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";
System.out.println(Long.MAX_VALUE + 1);
System.out.println(Long.MAX_VALUE + 1);이 Long.MIN_VALUE를 출력하는 원리는 정수 오버플로우 때문입니다. Long.MAX_VALUE는 9223372036854775807이고, 이 값에 1을 더하면 정수의 최대 범위를 초과하여 오버플로우가 발생합니다. 이 경우, 값은 최소값인 -9223372036854775808로 돌아갑니다. 이것은 컴퓨터에서 정수를 표현하는 방식에 기인한 현상입니다.