[Java] 참조

Korangii·2024년 7월 6일
0

Java

목록 보기
19/24
post-thumbnail

객체

  • 데이터와 메소드로 구성된 덩어리

스택(Stack)

  • 변수들이 생성되는 메모리 영역
  • 기본 타입 변수 : 직접 값 저장

힙(Heap)

  • 참조 타입 변수 : String 객체 번지 저장 / 이 번지를 통해 String 객체 참조

메소드 영역

  • 바이트코드 파일을 읽은 내용이 저장되는 영역
  • 상수, 정적 필드, 메소드 코드, 생성자 코드 등이 저장

힙 영역

  • 객체가 생성되는 영역
  • 객체의 번지는 메소드 영역과 스택영역의 상수와 변수에서 참조 가능

스택 영역

  • 메소드를 호출할 때마다 생성되는 프레임이 저장되는 영역
  • 메소드 호출이 끝나면 프레임 자동 제거
  • 프레임 내부
    • 로컬 변수 스택이 존재
    • 기본 타입 변수와 참조 타입 변수가 생성되고 제거됨
  • null로 초기화된 참조변수가 생성되는 영역

==, != 연산자

  • if문에서 사용
if(refVar2 == refVar3) { ... }
  • 변수의 값이 같은지, 아닌지 조사
  • 참조타입 변수의 값은 객체의 번지 비교
  • 번지가 같다면 동일한 객체 참조 / 다르다면 다른 객체 참조

배열

  • 여러 개의값을 저장하는 객체
package ch05.sec03;

public class ReferenceVariableCompareExample {
    public static void main(String[] args) {
        int[] arr1; // 배열 변수 arr1 선언
        int[] arr2; // 배열 변수 arr2선언
        int[] arr3; // 배열 변수 arr3 선언

        arr1 = new int[] {1,2,3}; // 배열 {1,2,3}을 생성하고 arr1 변수에 대입
        arr2 = new int[] {1,2,3}; // 배열 {1,2,3}을 생성하고 arr2 변수에 대입
        arr3 = arr2; // 배열 변수 arr2을 생성하고 배열 변수 arr3에 대입

        System.out.println(arr1 == arr2); // arr1과 arr2 변수가 같은 배열을 참조하는지 검사
        System.out.println(arr2 == arr3); // arr2과 arr3 변수가 같은 배열을 참조하는지 검사

    }
}

NullPointerException

  • NullPointerException : 변수가 null인 상태에서 객체의 데이터나 메소드를 사용하려 할 때 발생하는 예외
    • 예외가 발생한 곳에서 null 인 상태의 참조 변수가 사용되고 있음을 알아야 한다.
    • 예외 해결방법 : 참조변수가 객체를 정확히 참조하도록 번지를 대입한다.
  • null : 아직 번지를 저장하고 있지 않은 참조 타입 변수
    • 초기값으로 사용 가능
    • null로 초기화된 참조 변수는 stack 영역에 생성
    • 변수에 null을 대입하면 번지를 잃게 되므로 더 이상 객체를 사용할 수 없게 된다.

Garbage Collector

  • 어떤 변수에서도 참조하지 않는 객체 = 프로그램에서 사용할 수 없는 객체
  • Garbage Collector를 통해 자동 제거
  • 힙 메모리에는 존재하나, 위치 정보를 모르기 때문에 사용할 수 없다.
  • 객체를 제거하는 유일한 방법 : 객체의 모든 참조를 없애는 것

문자열(String) 타입

  • String 객체 : 자바의 문자열 생성 형태
  • 자바는 문자열 리터럴이 동일하다면 String 객체를 공유하도록 설계되어 있다.
  • 빈 문자열(" ") 대입도 가능하다.

new 연산자

  • 객체 생성 연산자
String name1 = new String("홍길동");
String name2 = new String("홍길동");
  • 문자열 리터럴로 생성하느냐 new 연산자로 생성하느냐에 따라 비교 연산자의 결과가 달라질 수 있다.
String name1 = "홍길동";
String name2 = "홍길동";
String name3 = new String("홍길동");

name1 == name2 // 결과값 : true
name1 == name3 // 결과값 : false
  • 값의 목록은 없지만 향후 값들을 저장할 목적으로 배열을 미리 생성하는 것
  • 길이 : 배열이 저장할 수 있는 항목 수를 말한다.
  • 이미 배열 변수가 선언된 후에도 대입이 가능하다.
타입[] 변수 = null;
변수 = new 타입[길이];
  • 배열을 처음 생성하면 배열 항목은 기본값으로 초기화된다.
  • 기본타입
    • 0 : byte[], char[], short[], int[], long[]
    • 0.0 : float[], double[]
    • false : boolean[]
  • 참조 타입
    • null : 클래스[], 인터페이스[]

equals()

  • 내부 문자열만을 비교할 경우 사용
  • 동일한 String 객체든 다른 String 객체든 상관없이 비교 가능하다.
  • 빈 문자열(" ") 참조도 가능하다.
boolean result = str1.equals(str2);
// str1이 원본 문자열
// str2가 비교 문자열

charAt()

  • 문자열에서 특정 위치의 문자를 얻는 메소드
  • 인덱스 길이 구하기 : 0에서부터 문자열의 길이 - 1

length()

  • 문자열에서 문자의 개수 얻는 메소드
  • 공백의 개수를 포함한다.

replace()

  • 문자열에서 특정 문자열을 다른 문자열로 대체하는 메소드
  • 기존 문자열은 그대로 두고, 대체한 새로운 문자열을 리턴한다.

indexOf()

  • 문자열에서 특정 문자열의 위치를 찾는 메소드
  • 주어진 문자열이 시작되는 인덱스를 리턴한다.
  • 주어진 문자열이 포함되어 있지않으면 -1을 리턴한다.

contains()

  • 주어진 문자열이 단순히 포함되어 있는지만 조사하는 메소드
  • 원하는 문자열이 포함되어 있으면 true 리턴
  • 원하는 문자열이 포함되어 있지 않으면 false 리턴

split()

  • 구분자를 사용하여 여러 개의 구성된 문자열을 따로 분리해서 얻는 메소드
  • board는 쉼표로 구분된 문자열을 갖고 있다.

배열(Array) 타입

  • 변수는 하나의 값만 저장가능하다.
  • 배열
    • 연속된 공간에 값을 나열시키고, 각 값에 인덱스를 부여해놓은 자료 구조
    • 많은 양의 값을 다루는 좀 더 효율적인 방법
    • for문과 사용
  • 배열 변수 선언
    • 배열 변수는 참조 변수이다.
    • 힙 : 객체인 배열을 생성하고 주소를 저장하는 장소
    • 저장된 번지를 리턴한다.
    • null 초기화 가능 : 참조할 배열이 없다면 null로 초기화 가능하다.
    • 배열 변수는 리턴된 번지를 저장함으로써 참조가 이루어진다.
타입[] 변수;
타입 변수[];
  • new 타입[] : 배열 변수를 선언한 시점과 값 목록이 대입되는 시점이 다를 때 사용한다.
변수 = new 타입[] [0,1,2,3, ... };

배열 길이

  • 배열에 저장할 수 있는 항목 수
  • 읽기만 가능하며 값을 변경할 수 없다.
  • for문을 사용해서 전체 배열 항목을 반복할 때 많이 사용한다.
배열변수.length

ArrayIndexOutOfBoundsExecption

  • 인덱스를 초과해서 사용하면 발생

- < 연산자 : for문의 조건식에서 < 연산자를 사용한 이유는 배열의 마지막 인덱스는 배열 길이보다 1이 적기 때문이다.


다차원 배열

  • 배열 항목에 또 다른 배열이 대입되는 것
  • [] : 값 목록으로 생성할 때 차원의 수만큼 붙인다.
타입[][] 변수 = {
	{1,2, ... }, // 1차원 배열의 0 인덱스
    {3,4, ... }, // 1차원 배열의 1 인덱스
    ...
    };
  • new 연산자 : new 타입 뒤에 대괄호[]를 차원의 수만큼 붙인다.
타입[][] 변수 = new 타입[1차원수][2차원수];

배열 복사

  • 배열은 한 번 생성하면 길이를 변경할 수 없다.
  • 더 큰 길이의 배열을 새로 만들고 이전 배열로부터 항목들을 복사해야한다.
  • 초기갑은 0/null/false이다.
  • 가장 기본적인 복사 방법은 for문을 이용해서 항목을 하나씩 읽고 새로운 배열에 저장하는 것이다.

향상된 for문(배열 항목 반복을 위한)

  • 배열 및 컬렉션을 좀 더 쉽게 처리할 목적으로 자바에서 제공한다.
  • 항목의 개수만큼 반복한 후 자동으로 for문을 빠져나간다.
for (int score:scores) [
	sum = sum + scores;
}

String[] args

  • 문자열 배열 형태인 매개변수

Enum(열거) 타입

  • 한정된 값을 갖는 타입
  • 사용법 : 소스파일 생성(.java) -> 한정된 값을 코드로 정의
  • 열거 타입 이름 : 첫문자는 대문자 + 캐멀스타일
Week.java
MemberGrade.java
ProductKind.java
profile
https://honeypeach.tistory.com/ 로 이전했습니다.

0개의 댓글