Monday

3. Java 참조 타입(스트링, 배열, enum) 본문

언어/Java

3. Java 참조 타입(스트링, 배열, enum)

뉴비2 2024. 11. 10. 18:58

기본 타입 vs 참조 타입

기본 타입은 실제 데이터 값을 저장하지만, 참조 타입은 메모리 주소를 저장합니다.

// 기본 타입 예시
int number = 100;  // 실제 값 저장

// 참조 타입 예시
String name = "홍길동";  // 메모리 주소 참조

참조 변수 연산

참조 변수 비교 예제:

public class ReferenceCompareExample {
    public static void main(String[] args) {
        String str1 = new String("Hello");
        String str2 = new String("Hello");
        String str3 = str1;

        // 객체 주소 비교
        System.out.println(str1 == str2);       // false
        System.out.println(str1 == str3);       // true

        // 내용 비교 (권장)
        System.out.println(str1.equals(str2));  // true
    }
}

Null과 NullPointerException

안전한 null 처리 방법:

public class NullSafetyExample {
    public static void printLength(String str) {
        // null 체크 후 안전하게 처리
        if (str != null) {
            System.out.println("문자열 길이: " + str.length());
        } else {
            System.out.println("문자열이 null입니다.");
        }
    }

    public static void main(String[] args) {
        String validString = "Hello";
        String nullString = null;

        printLength(validString);    // 정상 처리
        printLength(nullString);     // null 안전하게 처리
    }
}

String 타입 심화

public class StringExample {
    public static void main(String[] args) {
        // 문자열 리터럴은 동일 객체 참조
        String s1 = "Java";
        String s2 = "Java";
        String s3 = new String("Java");

        System.out.println(s1 == s2);       // true
        System.out.println(s1 == s3);       // false
        System.out.println(s1.equals(s3));  // true
    }
}

05-2 배열 마스터하기

배열 생성과 초기화의 베스트 프랙티스

public class ArrayMasterExample {
    public static void main(String[] args) {
        // 다양한 배열 초기화 방법
        int[] scores = {90, 85, 95};  // 직접 초기화

        // 동적 배열 생성
        int[] dynamicScores = new int[5];
        Arrays.fill(dynamicScores, 100);  // 모든 요소를 100으로 초기화

        // 객체 배열
        Person[] people = new Person[3];
        people[0] = new Person("홍길동");
        people[1] = new Person("김철수");

        // 향상된 for문
        for (Person person : people) {
            System.out.println(person.getName());
        }

        // 배열 복사
        int[] originalArray = {1, 2, 3, 4, 5};
        int[] copiedArray = Arrays.copyOf(originalArray, 10);
    }
}

class Person {
    private String name;

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

05-3 열거 타입: 의미 있는 상수 그룹

public enum DayOfWeek {
    MONDAY("월요일"),
    TUESDAY("화요일"),
    WEDNESDAY("수요일"),
    THURSDAY("목요일"),
    FRIDAY("금요일"),
    SATURDAY("토요일"),
    SUNDAY("일요일");

    private final String korean;

    DayOfWeek(String korean) {
        this.korean = korean;
    }

    public String getKorean() {
        return korean;
    }
}

public class EnumExample {
    public static void main(String[] args) {
        DayOfWeek today = DayOfWeek.WEDNESDAY;

        switch (today) {
            case SATURDAY:
            case SUNDAY:
                System.out.println("주말입니다.");
                break;
            default:
                System.out.println("평일입니다.");
        }

        // 열거 타입의 메서드
        System.out.println(today.name());           // WEDNESDAY
        System.out.println(today.ordinal());        // 인덱스 (2)
        System.out.println(today.getKorean());      // 수요일
    }
}
Comments