Java프로그래밍 1학기 2학년

방송대 Java프로그래밍 8강: Object 공통 기능과 문자열·포장 변환

Java프로그래밍 8강 - java.lang 패키지

방송대 Java프로그래밍 8강: Object 공통 기능과 문자열·포장 변환

"Java"와 new String("Java")는 내용이 같은데 왜 == 결과가 달라질 수 있을까? 문자열을 1만 번 이어 붙일 때는 왜 String 대신 다른 클래스를 고려할까? 숫자 134와 문자열 "134"는 어떤 메서드로 오가야 할까? 이 질문들은 모두 값의 내용, 객체의 정체성, 변경 가능성, 자료형을 구분하면 풀린다.

같아 보이는 값도 네 가지 기준으로 나누어야 한다

이번 강의의 클래스들은 서로 다른 일을 하는 목록처럼 보이지만, 실제로는 Java의 값을 네 관점에서 다룬다. Object는 모든 객체가 공유하는 기본 행동을 제공하고, String과 StringBuffer는 문자열을 변경 불가능한 객체와 변경 가능한 객체로 나눈다. 포장 클래스는 기본형 값을 객체 세계와 연결하며, System은 표준 입출력과 시스템 기능으로 값을 외부와 주고받는다.

판단 기준묻는 질문주요 클래스·메서드
객체의 공통 행동어떻게 표현·비교·복제·조사하는가?Object의 toString(), equals(), clone(), getClass()
내용 변경 가능성변환할 때 새 객체가 필요한가?불변 String, 가변 StringBuffer·StringBuilder
자료형 변환기본형·포장 객체·문자열 중 무엇을 얻는가?parseInt(), valueOf(), toString()
외부 입출력값을 어디서 읽고 어디로 내보내는가?System.in, System.out, System.err

비교의 출발점: 결과만 보지 말고 ① 참조가 같은가, ② 저장된 내용이 같은가, ③ 기존 객체가 바뀌는가, ④ 반환 자료형이 무엇인가를 차례로 묻는다.

java.lang은 import 없이 사용하는 기본 클래스의 자리다

java.lang 패키지는 Java 프로그램에 필요한 기본 클래스를 제공하며 별도의 import 없이 사용할 수 있다. 강의에서 다루는 Object, String, StringBuffer, System, Class, Math, 포장 클래스가 여기에 속한다. Process, Thread, Exception, Throwable, Error도 주요 구성원이다.

이 중 Object는 객체 계층의 뿌리이고, String 계열은 문자 데이터 처리, 포장 클래스는 기본형과 참조형 사이의 연결, System은 플랫폼·시스템 기능을 담당한다. 즉, 자동 import라는 편의보다 “거의 모든 Java 코드가 공통으로 의존하는 기반”이라는 관계가 중요하다.

Object의 메서드는 객체를 바라보는 네 가지 질문에 답한다

모든 클래스는 명시적으로 extends Object를 쓰지 않아도 자동으로 Object를 상속한다. 따라서 자식 클래스는 Object의 기본 메서드를 물려받고 필요하면 의미에 맞게 재정의할 수 있다.

질문메서드기본 역할재정의·사용 포인트
어떻게 보일까?toString()객체를 문자열로 표현상태가 드러나는 읽기 쉬운 표현으로 재정의
같은 객체인가?equals(Object)Object에서는 참조값 기준 비교String·Integer 등은 내용이나 저장 값을 비교하도록 재정의
어떻게 식별할까?hashCode()객체를 식별하는 정숫값 반환객체 비교 의미와 함께 고려
복제할 수 있을까?clone()객체 복제본 반환Cloneable 구현과 예외 처리 필요
실제 클래스는 무엇일까?getClass()현재 객체의 Class 객체 반환이름·상위 클래스·필드·메서드 정보 확인

toString()은 문자열 결합이나 System.out.println()에서 객체의 문자 표현이 필요할 때도 사용된다. 기본 표현은 클래스 이름과 식별 정보 형태이지만, 자식 클래스가 재정의하면 객체 자체를 출력할 때도 그 결과가 쓰인다.

class Ticket {
    private final int number;

    Ticket(int number) {
        this.number = number;
    }

    @Override
    public String toString() {
        return "Ticket#" + number;
    }
}

Ticket ticket = new Ticket(42);
System.out.println(ticket); // Ticket#42

==와 equals는 참조 동일성과 내용 동등성을 구분한다

참조형에서 ==는 두 변수가 같은 객체를 가리키는지 비교한다. Object가 제공하는 기본 equals()도 참조값을 기준으로 하므로 기본 상태에서는 ==와 같은 의미다. 그러나 자식 클래스가 equals()를 재정의하면 저장된 데이터가 같은지를 비교하도록 의미를 바꿀 수 있다.

String a = "orbit";
String b = "orbit";
String c = new String("orbit");

System.out.println(a == b);       // true: 같은 리터럴 객체 공유
System.out.println(a == c);       // false: 서로 다른 객체
System.out.println(a.equals(c));  // true: 문자열 내용 비교

리터럴 a와 b는 같은 문자열 객체를 공유하지만, new를 사용한 c는 별도 객체다. 따라서 참조 비교 결과는 달라도 String이 재정의한 equals로 내용은 같다고 판정한다.

포장 객체의 경계: 값이 5라는 이유만으로 Integer.valueOf(5).equals(Short.valueOf((short) 5))가 true가 되지는 않는다. 강의 예처럼 포장 클래스의 equals는 저장 값뿐 아니라 객체 유형도 고려한다. 반면 서로 같은 Integer 값은 내용 비교에서 true가 된다.

clone과 getClass는 복제 가능성과 실제 유형을 확인한다

clone()은 객체를 복제해 반환하지만 아무 객체에서나 곧바로 호출하는 용도가 아니다. 강의 예제처럼 사용자 클래스가 Cloneable을 구현하고, super.clone()에서 생길 수 있는 CloneNotSupportedException을 처리해야 한다. Object의 clone 반환형은 Object이므로 구체적 변수에 넣을 때 형 변환도 필요하다.

class SizeBox implements Cloneable {
    private int width;
    private int height;

    SizeBox(int width, int height) {
        this.width = width;
        this.height = height;
    }

    @Override
    public Object clone() {
        try {
            return super.clone();
        } catch (CloneNotSupportedException e) {
            return null;
        }
    }
}

SizeBox first = new SizeBox(18, 27);
SizeBox copied = (SizeBox) first.clone();

getClass()는 현재 객체의 실제 클래스 정보를 담은 Class 객체를 반환한다. 그 객체를 통해 클래스 이름, 슈퍼클래스, 선언된 필드와 메서드 목록을 확인할 수 있다. 선언 변수의 자료형을 보는 것이 아니라 실행 중 객체의 유형 정보를 얻는다는 점이 핵심이다.

String은 내용을 바꾸지 않고 결과용 새 객체를 만든다

String은 문자열을 표현하고 처리하는 클래스다. new String("Java")처럼 생성자를 호출할 수도 있고, String word = "Java";처럼 기본형과 비슷한 모양으로 리터럴을 대입할 수도 있다. 같은 문자열 리터럴은 하나의 객체로 만들어져 공유될 수 있다.

가장 중요한 성질은 불변(immutable)이라는 점이다. 한 번 생성된 String 객체의 내용은 바뀌지 않는다. replace(), trim(), toUpperCase(), toLowerCase(), concat() 같은 변환 메서드는 원본을 수정하지 않고 결과를 담은 새 문자열 객체를 반환한다.

String source = "  blue-orbit  ";
String result = source.trim().toUpperCase();

System.out.println(source); // 앞뒤 공백이 있는 원본 유지
System.out.println(result); // BLUE-ORBIT

오개념 교정: source.trim();만 실행하면 source가 짧아진다고 생각하기 쉽다. 하지만 반환값을 받지 않으면 새 객체의 참조를 잃고 source는 그대로다. String 변환 코드는 “어느 변수에 반환 참조를 저장했는가”까지 확인해야 한다.

문자열 메서드는 비교·검색·추출·변환으로 선택한다

메서드 이름을 모두 따로 외우기보다 원하는 결과를 먼저 분류하면 선택이 쉬워진다. 비교는 같은지 또는 정렬상 앞뒤인지, 검색은 위치를 찾는지, 추출은 일부를 꺼내는지, 변환은 새 문자열을 만드는지로 나눈다.

목적주요 메서드반환·범위 판단
비교equals(), equalsIgnoreCase(), compareTo(), compareToIgnoreCase()동등 여부는 boolean, 순서 비교는 같은 경우 0
검색indexOf(), lastIndexOf()찾은 인덱스, 없으면 -1
한 문자·부분 추출charAt(), substring()substring(begin, end)는 begin 포함, end 제외
새 문자열 변환replace(), trim(), toUpperCase(), toLowerCase(), concat()원본은 유지되고 새 String 반환
형태 검사·배열 변환startsWith(), endsWith(), toCharArray()접두·접미 여부 또는 char 배열 반환

직접 구성한 문자열 "catalog-2048"에서 substring(8, 12)를 실행하면 인덱스 8부터 11까지인 "2048"을 얻는다. end 인덱스 12의 문자는 포함하지 않는다. indexOf("log")는 처음 등장하는 위치 4를 반환하고, 없는 문자열을 찾으면 -1이다.

StringBuffer는 같은 객체의 버퍼를 바꾸며 연결 작업을 줄인다

StringBuffer는 생성 뒤에도 내용을 바꿀 수 있는 가변(mutable) 클래스다. 내부에 크기가 조절되는 버퍼를 사용하므로, 문자열을 반복해서 추가·삭제·삽입·교체할 때 같은 객체를 이어서 사용할 수 있다. 빈 객체의 초기 버퍼 크기는 16이며, 문자열로 생성하면 강의 기준 초기 capacity는 문자열 길이에 16을 더한 값이다.

StringBuffer buffer = new StringBuffer("map");
System.out.println(buffer.length());   // 3
System.out.println(buffer.capacity()); // 19

buffer.append("-data");
buffer.insert(0, "open-");
buffer.replace(5, 8, "source");
System.out.println(buffer);

length()는 현재 문자 수, capacity()는 버퍼가 확보한 크기다. 따라서 두 값은 같은 개념이 아니다. 주요 변경 메서드에는 append(), delete(start, end), insert(offset, value), replace(start, end, value), reverse()가 있다. 범위를 받는 메서드에서는 String의 substring처럼 끝 인덱스를 포함하지 않는다.

강의의 반복 연결 실험에서는 String의 +가 기존 객체를 두고 새 객체를 계속 만드는 반면, StringBuffer와 StringBuilder는 append()로 가변 객체를 사용해 훨씬 짧은 측정 시간이 나왔다. 구체적인 시간은 실행 환경에 따라 달라지므로 숫자 자체보다 “빈번한 변경에서 새 String 객체 생성이 누적된다”는 원리를 읽어야 한다.

선택 기준: 완성된 문자열을 값처럼 보관·비교할 때는 String이 자연스럽다. 반복문 안에서 문자열을 계속 이어 붙이거나 중간 내용을 자주 수정한다면 StringBuffer 또는 StringBuilder의 가변 버퍼를 고려한다.

포장 클래스는 기본형 값을 객체로 다루게 한다

포장 클래스(wrapper class)는 기본형을 참조형 객체로 표현한다. 정수형 byte, short, int, long에는 각각 Byte, Short, Integer, Long이 대응한다. 실수형은 Float와 Double, 문자형은 Character, 논리형은 Boolean이다.

숫자 포장 클래스인 Byte, Short, Integer, Long, Float, Double은 추상 부모 클래스 Number를 상속한다. 포장 객체가 필요한 메서드 인자, Integer.MIN_VALUE 같은 상수, 형 변환 메서드를 사용할 때 포장 클래스가 필요하다.

원하는 결과예시결과 자료형
문자열을 기본형 정수로Integer.parseInt("275")int
문자열을 포장 객체로Integer.valueOf("275")Integer
기본형을 포장 객체로Integer.valueOf(275)Integer
정수를 문자열로Integer.toString(275)String
다양한 값을 문자열로String.valueOf(275)String
포장 객체를 기본형으로boxed.intValue()int
int primitive = Integer.parseInt("275");
Integer boxed = Integer.valueOf("275");
String text1 = Integer.toString(primitive);
String text2 = boxed.toString();

System.out.println(primitive + 25); // 300
System.out.println(text1 + 25);     // 27525

마지막 두 줄은 반환 자료형을 놓치면 결과를 잘못 예측하는 예다. 기본형 int에는 덧셈이 적용되지만 String에는 연결이 적용된다.

박싱과 언박싱은 변환 방향을 기준으로 판정한다

박싱(boxing)은 기본형 값을 대응하는 포장 객체로 바꾸는 것이고, 언박싱(unboxing)은 포장 객체에서 기본형 값을 꺼내는 것이다. 생성자나 valueOf()를 사용할 수 있으며, 변수 대입이나 인자 전달에서는 자동 변환도 일어난다.

Integer count = 17;   // 자동 박싱: int → Integer
int next = count + 1; // 자동 언박싱 후 덧셈: Integer → int

Double rate = Double.valueOf(2.75);
double value = rate.doubleValue(); // 명시적 언박싱

Integer.valueOf(3) % 2처럼 포장 객체가 산술 연산에 참여하면 기본형으로 자동 언박싱된다. “오른쪽에 객체가 보이는가”만 보지 말고, 대입 대상과 연산자가 요구하는 자료형을 확인해야 변환 방향을 정확히 판정할 수 있다.

변환 메서드 선택 순서: ① 출발 자료형이 String·기본형·포장 객체 중 무엇인지 표시한다. ② 목표가 기본형이면 parseXxx() 또는 xxxValue(), 포장 객체면 valueOf(), 문자열이면 toString() 또는 String.valueOf()를 고른다.

System의 세 표준 필드는 입력·출력·오류 경로를 나눈다

System은 Java 플랫폼과 시스템 관련 기능을 제공한다. 모든 멤버가 static이므로 객체를 만들지 않고 사용한다. 표준 입력 객체 System.in은 InputStream, 표준 출력 System.out과 표준 에러 출력 System.err는 PrintStream 유형이다.

필드자료형강의의 사용 목적
System.inInputStream키보드 등 표준 입력에서 바이트 읽기
System.outPrintStream일반 데이터를 화면에 출력
System.errPrintStream오류 메시지를 화면에 출력

System.in.read()는 한 번에 1바이트를 읽어 int로 반환한다. 강의의 문자 입력 예에서 a와 Enter를 입력하면 먼저 a를 읽고, 해당 실행 환경의 줄 끝 바이트 13과 10을 차례로 읽는다. 이 숫자는 문자가 사라진 것이 아니라 Enter 입력도 바이트로 남았음을 보여 준다.

여러 자리 숫자는 바이트 하나씩 읽기보다 InputStreamReader와 BufferedReader로 한 줄을 문자열로 받은 뒤 Integer.parseInt()로 변환할 수 있다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class NumberInput {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(
            new InputStreamReader(System.in));

        System.out.print("Input a number: ");
        String line = reader.readLine();
        int number = Integer.parseInt(line);
        System.out.println(number + 6);
        reader.close();
    }
}

입력값을 134라고 가정하면 readLine의 결과는 문자열 "134"이고, parseInt 뒤에는 정수 134가 된다. 마지막 덧셈 결과는 140이다. 이 흐름은 7강의 예외 처리와 9강의 스트림 학습을 이어 주지만, 여기서는 표준 입력과 문자열·정수 변환까지만 다룬다.

메서드 이름보다 출발값·목표값·변경 여부를 먼저 표시한다

  1. 출발값 표시: 객체 참조, String, 기본형, 포장 객체 중 무엇인지 적는다.
  2. 목표 결정: 비교 결과, 위치, 부분 문자열, 가변 버퍼, 기본형, 포장 객체 중 필요한 결과를 정한다.
  3. 변경 여부 확인: String처럼 새 객체를 반환하는지, StringBuffer처럼 현재 객체를 바꾸는지 본다.
  4. 반환 자료형 추적: parseInt()의 int와 valueOf()의 Integer처럼 비슷한 이름의 결과를 구분한다.
  5. 입출력 경계 확인: 바이트 입력인지 한 줄 문자열인지 확인하고 필요한 변환을 연결한다.

예를 들어 "52"를 읽어 8을 더하려면 String 연결이 아니라 정수 덧셈이 필요하므로 Integer.parseInt("52") + 8을 선택한다. 결과는 60이다. 반대로 숫자 52 뒤에 단위 텍스트를 붙이려면 String.valueOf(52)나 문자열 결합을 사용한다.

핵심 개념 정리

  • Object의 공통 메서드는 객체의 표현·동등성·식별·복제·실제 유형을 다룬다.
  • ==는 참조 동일성을 보고, 재정의된 equals()는 클래스가 정한 내용 동등성을 판단한다.
  • String은 불변이라 변환 결과가 새 객체이고, StringBuffer는 가변 버퍼를 같은 객체에서 수정한다.
  • 문자열 메서드는 비교·검색·추출·변환 중 원하는 결과로 고르며, 부분 범위의 끝 인덱스는 제외된다.
  • 포장 클래스는 기본형을 객체로 다루며, parse·valueOf·toString 계열은 반환 자료형을 기준으로 구분한다.
  • System의 in·out·err는 표준 입력·출력·오류 경로이며, 읽은 문자열은 필요한 기본형으로 변환해 사용한다.

값 처리 코드를 읽을 때는 참조인가 내용인가 → 원본이 유지되는가 현재 객체가 바뀌는가 → 출발 자료형과 목표 자료형은 무엇인가 → 반환값을 어느 변수에 받는가 → 입력 바이트가 최종 계산값으로 어떻게 변하는가를 순서대로 추적한다. 이 다섯 질문이면 여러 java.lang 메서드를 암기 목록이 아니라 변환 도구로 선택할 수 있다.

예상문제 10선

1. java.lang 패키지에 대한 설명으로 옳은 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ③

  • ① 오답: java.lang의 클래스는 자동 포함되므로 String처럼 단순 이름으로 쓸 수 있다.
  • ② 오답: Object, String, System과 포장 클래스 등 다양한 참조형 클래스가 속한다.
  • ③ 정답: 기본 프로그래밍에 필요한 공통 클래스를 제공하고 자동으로 사용할 수 있다는 핵심을 설명했다.
  • ④ 오답: Object는 java.lang의 중심 클래스이며 표준 입력은 System 기능 중 하나다.

2. String a = "orbit";, String c = new String("orbit");일 때 옳은 결과는?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ①

  • ① 정답: new로 별도 객체를 만들었으므로 참조는 다르지만 String.equals는 같은 내용을 확인한다.
  • ② 오답: String은 equals를 재정의해 참조가 아니라 문자열 내용을 비교한다.
  • ③ 오답: 참조형의 ==는 내용이 아닌 동일한 객체를 가리키는지 비교한다.
  • ④ 오답: 두 비교 연산의 의미와 예상 결과를 서로 뒤바꿨다.

3. String word = " blue "; word.trim(); 뒤의 word 값에 대한 설명으로 옳은 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ④

  • ① 오답: trim은 앞뒤 공백을 제거한 새 문자열을 만들 뿐 빈 문자열로 바꾸지 않는다.
  • ② 오답: 메서드 반환 참조를 word에 명시적으로 대입해야 변수가 새 결과를 가리킨다.
  • ③ 오답: String은 불변 객체이므로 기존 문자열의 내부 내용을 수정하지 않는다.
  • ④ 정답: 새 결과가 반환되어도 받는 변수가 없으므로 기존 참조에는 변화가 없다.

4. "catalog-2048".substring(8, 12)의 결과는?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ②

  • ① 오답: 하이픈은 인덱스 7이므로 시작 인덱스 8의 범위에 포함되지 않는다.
  • ② 정답: 인덱스 8, 9, 10, 11의 문자를 포함하고 끝 인덱스 12는 제외한다.
  • ③ 오답: 끝 인덱스 바로 전까지 네 문자를 취해야 하는데 마지막 8을 누락했다.
  • ④ 오답: 시작 인덱스를 9로 적용해 첫 문자 2를 빠뜨렸다.

5. 반복문에서 문자열 조각을 수천 번 이어 붙이며 같은 객체의 내용을 계속 바꾸려 한다. 가장 알맞은 선택은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ③

  • ① 오답: String의 불변성 때문에 반복 연결마다 새 객체가 누적되는 문제를 그대로 만든다.
  • ② 오답: equals는 동등성 비교 메서드이며 문자열 추가 기능이 아니다.
  • ③ 정답: 가변 버퍼를 가진 객체에서 append를 반복해 빈번한 변경 목적에 맞는다.
  • ④ 오답: parseInt는 숫자 모양 문자열을 int로 바꾸는 변환 메서드다.

6. Integer.parseInt("275")와 Integer.valueOf("275")의 결과 자료형을 바르게 연결한 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ④

  • ① 오답: 두 메서드 모두 String을 입력으로 받지만 결과를 문자열로 돌려주지 않는다.
  • ② 오답: 기본형 변환과 포장 객체 생성 결과를 서로 뒤바꿨다.
  • ③ 오답: valueOf는 같은 값을 담은 Integer 참조를 반환한다.
  • ④ 정답: 목표가 기본형인지 포장 객체인지에 따라 두 메서드를 정확히 구분했다.

7. Integer count = 17;에서 일어나는 변환은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ①

  • ① 정답: 오른쪽 기본형 값을 왼쪽 포장 클래스 변수에 맞추는 방향이므로 박싱이다.
  • ② 오답: 대입 대상은 String이 아니라 Integer이며 문자열 변환 메서드도 없다.
  • ③ 오답: 오른쪽 17은 문자열 리터럴이 아니라 int 리터럴이다.
  • ④ 오답: 언박싱은 포장 객체에서 기본형 값을 꺼내는 반대 방향이다.

8. System.in, System.out, System.err의 역할을 바르게 설명한 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ②

  • ① 오답: in은 InputStream이고 out과 err는 PrintStream 유형이며 버퍼 문자열 저장용 필드가 아니다.
  • ② 정답: 일반 데이터와 오류 메시지의 출력 경로까지 세 필드의 용도를 정확히 구분했다.
  • ③ 오답: 입력과 출력 역할을 바꾸었고 객체 복제는 Object의 clone과 관련된다.
  • ④ 오답: System의 멤버는 static이므로 객체 생성 없이 클래스 이름으로 사용한다.

9. 문자열 입력 "134"를 Integer.parseInt()로 변환한 뒤 6을 더하면 결과는?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ④

  • ① 오답: parseInt를 생략하고 String에 숫자를 연결했을 때 예상되는 형태다.
  • ② 오답: 덧셈 6을 뺄셈으로 잘못 적용했다.
  • ③ 오답: 문자열을 정수로 바꾸는 단계까지만 반영하고 마지막 덧셈을 누락했다.
  • ④ 정답: 문자열이 int 134가 된 뒤 정수 덧셈 134 + 6이 실행된다.

10. 키보드에서 여러 자리 숫자를 한 줄로 읽어 계산하고, 결과 문장을 반복해서 조립하려 한다. 가장 적절한 흐름은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ③

  • ① 오답: read 한 번은 1바이트를 읽고, 불변 String의 기존 내용을 직접 수정할 수 없다.
  • ② 오답: equals는 비교, clone은 객체 복제이며 문자열 숫자 변환과 누적 연결 도구가 아니다.
  • ③ 정답: 한 줄 입력, 문자열-정수 변환, 반복적인 가변 문자열 조립을 각 목적에 맞는 도구로 연결했다.
  • ④ 오답: System.err는 오류 출력 경로이며 표준 입력을 읽는 필드가 아니다.

참고 자료와 작성 기준

이 글은 해당 차시 강의자료를 바탕으로 학습 목적에 맞게 재구성한 비공식 학습자료입니다. 객체 비교의 4축, 문자열 메서드 선택표, String과 가변 버퍼의 경계, 포장 변환 방향표와 표준 입력 변환 추적은 학습자가 결과를 직접 판정하도록 구성하고 검토했습니다.

  • 작성·편집: 올에이클래스 학습연구팀
  • 주요 근거: 한국방송통신대학교 Java프로그래밍 8강 「java.lang 패키지」 강의자료(교재 7장)
  • 보충 자료: 별도의 외부 자료를 본문 근거로 사용하지 않음
  • 편집 원칙: 올에이클래스 편집 정책
  • 최종 내용 검토: 2026-09-01

댓글