자바_03 참조타입

aggapang·2025년 4월 27일

kb IT's Your Life

목록 보기
11/20

자바 데이터 타입

기본 타입

  • 값 차제를 저장

참조 타입

  • 객체가 생성된 메모리 번지를 저장
  • 참조 타입에서는 ==, != 는 객체의 번지를 비교
  • 배열, 열거, 클래스, 인터페이스
  • null
    • NullPointerException : 변수가 null인 상태에서 객체의 데이터나 메소드를 사용하려고 할때
    • Garbage Collector : 더 이상 사용하지 않은 메모리 영역(garbage) 회수하는 역할, 자바는 주기적으로 실행해서 개발자가 신경쓸 필요 X

메모리 사용 영역

  • 메소드
    • 바이트코드 파일(.class) 내용 저장 영역
    • 객체 저장 공간 (new 키워드로 만든 것)
    • 객체의 주소는 메소드와 스택 영역에 저장되어 있음
  • 스택
    • 메소드 호출될때마다 생성되는 프레임이 저장되는 영역
    • FIFO

String 타입

  • 문자열
  • 선언
    • String name1 = "홍길동";
    • String name2 = new String("홍길동"); : new 연산자 (객체 생성 연산자)로 직접 String 객체 생성/ 대입 가능
구분설명예시결과
==객체의 주소 비교name1 == name2false
.equals()객체의 값 비교name1.equals(name2)true
.charAt()특정 위치의 문자 추출name1.charAt(1)'길'
.length()문자열 길이name1.length()3
.replace(기존,새로운)기존 문자를 새로운 문자로 변경name1.replace("홍", "김")"김길동"
.substring()문자열 추출name1.substring(1)"길동"
.substring(시작,끝)문자열 추출 (시작 index ~ 끝-1)name1.substring(1, 2)"길"
.indexOf()특정 문자열 위치 찾기name1.indexOf("길동")1
.contains()특정 문자열 포함 여부 확인name1.contains("홍")true
.split()문자열 분리name1.split(",")

배열

  • 연속된 공간에 값을 나열하고 각 값에 인덱스를 부여하는 자료구조
  • 인덱스는 대괄호 []를 사용하여 값을 읽거나 저장함
  • 선언
    • 타입[] 배열명, 타입 배열명[]
    • int[] arr1 = {1,2,3,4}; : 정적 초기화
    • int[] arr = new int[4]; : 동적 초기화(값이 정해지지 않은 경우)
      • 정수의 초기값은 0, bool은 false, 참조타입은 null
    • names = new String[] {"홍길동","김자바"} : 값 목록으로 선업
  • 배열 길이 arr.length
  • 다차원 배열
    • int[][] arr = {{1,2,3},{4,5}}
    • int[][] arr = new int[2][3]
    • new 연산자로 다차원 배열 생성 (길이 다르게 생성)
      int[][] scores = new int[2][];
      scores[0] = new int[3];
      scores[1] = new int[2];

변수의 복사

기본형

  • cpu가 변수에 들어 있는 데이터 자체를 다른 변수에 복사

참조형

얕은 복사

  • 주소 자체를 복사
  • 복사된 값, 원래 값 중 하나라도 변경시 모두 함께 변경됨

깊은 복사

  • 주소가 가리키는 값 목록을 복사
  • 복사된 값과 원래 값을 비교하면 주소가 다름
    • 방법구현 예장점단점
      System.arraycopy()System.arraycopy(원본 배열, 원본 시작 index, new 배열, new 붙여넣기 시작 index, 복사 항목 수);실행 속도가 빠름, 시스템 레벨 최적화시작/끝 인덱스 조절 필요, 배열 타입 일치 필요
      Arrays.copyOf()int[] b = Arrays.copyOf(a, a.length);사용이 간단함, 부분 복사와 크기 조절이 가능전체 배열 복사 시 비효율적, 배열 타입 자동 일치
      clone()int[] b = a.clone();매우 간단한 구현얕은 복사만 수행, 객체 배열에서 문제 발생 가능
      반복문 사용for (int i = 0; i < a.length; i++) { b[i] = a[i]; }조건에 따른 복사 가능, 가장 명시적인 방법코드가 길어질 수 있음, 수동 최적화 필요
  • 배열 같은 경우는 한번 생성하면 길이 변경 불가 -> 새롭게 복사
String[] oldArr = {"java,"c","python"};
String[] newArr = new String[5];
System.arraycopy(oldArr,0,newArr,0,oldArr.length) // java,c,python,null,null

열거(Enum) 타입

  • 요일, 계절, 월 같이 한정된 값을 가진 타입을 코드로 정의
  • 열거 타입이름으로 소스파일(.java) 만들어서 정의
  • 열거 타입 이름은 첫문자는 대문자인 캐멀 형식으로 지정
  • Week.java
    public enum Week{
        MONDAY,
        TUESDAY,
        WEDNESDAY,
        FRIDAY,
        SATURDAY,
        SUNDAY
    }
  • WeekExample.java
    public class WeekExample{
        public static void main(String[] args) {
          System.out.println("월요일은"+Week.MONDAY)
        }
    }
  • 리턴 타입
    • 리턴타입메소드(매개변수)설명
      Stringname()열거 객체의 문자열을 리턴
      intordinal()열거 객체의 순번(0부터 시작)을 리턴
      intcompareTo()열거 객체를 비교해서 순번 차이를 리턴
      열거타입valueOf(String name)주어진 문자열의 열거 객체를 리턴
      열거배열values()모든 열거 객체들을 배열로 리턴

0개의 댓글