728x90
반응형
객체(Object)란?
- 객체는 데이터와 메서드로 구성된 덩어리
- 객체 = 데이터(필드) + 메서드
참조 타입
- 객체의 번지를 참조하는 타입.
- 배열, 열거, 클래스, 인터페이스 타입.
- 기본 타입으로 선언된 변수는 값 자체를 저장하지만, 참조 타입으로 선언된 변수는 객체가 생성된 메모리 번지를 저장.
메모리 사용 영역
- JVM은 운영체제에서 할당받은 메모리 영역을 메소드 영역, 힙 영역, 스택 영역으로 구분해서 사용.
- 메서드 영역 : 바이트코드 파일을 읽은 내용이 저장되는 영역
- 힙 영역 : 객체가 생성되는 영역. 객체의 번지는 메서드 영역과 스택 영역의 상수와 변수에서 참조.
- 스택 영역 : 메소드를 호출할 때마다 생성되는 프레임이 저장되는 영역
참조 타입 변수의 ==, != 연산
- ==, != 연산자는 객체의 번지를 비교해 변수의 값이 같은지, 아닌지를 조사.
- 번지가 같다면 동일한 객체를 참조하는 것이고, 다르다면 다른 객체를 참조하는 것.
null 과 NullPointerException
- null값
- null(널) 값 : 참조 타입 변수는 아직 번지를 저장하고 있지 않다는 뜻.
- null도 초기값으로 사용할 수 있기 때문에 null로 초기화된 참조 변수는 스택 영역에서 생성.
- NullPointerException
- 변수가 null인 상태에서 객체의 데이터나 메서드를 사용하려 할 때 발생하는 예외.
- 참조 변수가 객체를 정확히 참조하도록 번지를 대입해야 해결됨.
String 타입
- 문자열은 String 객체로 생성.
public static void main(String[] args)
{
String name; // String 타입 변수 name 선언
name = "가나다"; // name 변수에 문자열 선언
String hobby = "라마바"; //String 타입 변수 hobby를 선언하고 문자열 대입
}
- 문자열 리터럴이 동일하다면 String 객체를 공유
public static void main(String[] args) {
String name1 = "가나다";
String name2 = "가나다";
}
- new 연산자(객체 생성 연산자)로 직접 String 객체를 생성 / 대입 가능.
- 문자열 추출 : charAt() 메소드로 문자열에서 매개값으로 주어진 인덱스의 문자를 리턴해 특정 위치의 문자를 얻을 수 있음.
- 문자열 길이 : length() 메소드로 문자열에서 문자의 개수를 얻을 수 있음.
- 문자열 대체 : replace() 메소드로 기존 메소드는 그대로 두고, 대체한 새로운 문자열을 리턴할 수 있음.
public static void main(String[] args) {
String oldStr = "가나다";
String newStr = oldStr.replace("가", "꺄");
}
- 문자열 잘라내기 : subString() 메소드로 특정 위치의 문자열을 잘라내여 가져올 수 있음.
메소드 | 설명 |
subString(int beginIndex) | beginIndex에서 끝까지 잘라내기 |
subString(int beginIndex, int endIndex) | beginIndex에서 endIndex 앞까지 잘라내기 |
- 문자열 찾기 : indexOf() 메소드로 문자열에서 특정 문자열의 위치를 찾을 수 있음.
public static void main(String[] args) {
String subject = "한글 가나다";
int index = subject.indexOf("가나다");
}
- 문자열 분리 : split() 메소드로 구분자가 있는 여러 개의 문자열을 분리할 수 있음.
public static void main(String[] args) {
String board = "번호, 제목, 내용, 글쓴이";
String[] arr = board.split(",");
}
배열(Array) 타입
- 연속된 공간에 값을 나열시키고, 각 값에 인덱스를 부여해 놓은 자료구조.
- 인덱스는 대괄호 []와 함께 사용하여 각 항목의 값을 읽거나 저장하는데 사용.
배열 변수 선언
- 두 가지 형태로 작성. ex) 타입[] 변수; or 타입 변수[];(첫번째가 관례적인 표기)
- 배열은 힙 영역에 생성되고 배열 변수는 힙 영역의 배열 주소를 저장.
- 참조할 배열이 없다면 배열 변수도 null로 초기화할 수 있음.
값 목록으로 배열 생성
- 배열에 저장될 값의 목록이 있다면, 다음과 같이 간단하게 배열을 생성할 수 있음.
public static void main(String[] args) {
타입[] 변수 = {값0, 값1, 값2, 값3};
}
- 배열 변수를 선언한 시점과 값 목록이 대입되는 시점이 다르다면 new 타입[]을 중괄호 앞에 붙여줌. 타입은 배열 변수를 선언할 때 사용한 타입과 동일하게 지정
public static void main(String[] args) {
변수 = new 타입[] {값0. 값1, 값2, 값3}
}
new 연산자로 배열 생성
- new 연산자로 값의 목록은 없지만 향후 값들을 저장할 목적으로 배열을 미리 생성
public static void main(String[] args) {
타입[] 변수 = new 타입[길이];
}
- new 연산자로 배열을 처음 생성하면 배열 항목은 기본값으로 초기화됨.
데이터 타입 | 초기값 | |
기본 타입 | bytr[] char[] short[] int[] long[] |
0 '\u0000' 0 0 0L |
float[] double[] |
0.0f 0.0 |
|
boolean[] | false | |
참조 타입 | 클래스[] 인터페이스[] |
null null |
배열 길이
- 배열의 길이란 배열에 저장할 수 있는 항목 수
- 코드에서 배열의 길이를 얻으려면 도트(.)연산자를 사용해서 참조하는 배열의 length 필드를 읽음. ex) 배열변수.length;
- 배열의 length 필드는 읽기만 가능하므로 값을 변경할 수는 없음.
- 배열 길이는 for문을 사용해서 전체 배열 항목을 반복할 때 많이 사용.
다차원 배열
- 배열 항목에는 또 다른 배열이 대입된 배열
- Ex) 변수[1차원 인덱스][2차원인덱스]...[N차원인덱스]
값 목록으로 다차원 배열 생성
- 값 목록으로 다차원 배열을 생성 시 변수 선언 시 타입 뒤에 대괄호[]를 차원의 수만큼 붙이고, 값 목록도 마찬가지로 차원의 수만큼 중괄호를 중첩.
new 연산자로 다차원 배열 생성
- new 연산자로 다차원 배열을 생성하려면 배열 변수 선언 시 타입 뒤에 대괄호[]를 차원의 수만큼 붙이고, new 타입 뒤에도 차원의 수만큼 대괄호[]를 작성.
- Ex) 타입[][] 변수 = new 타입[1차원수][2차원수];
배열에서 객체 참조하기
- 기본 타입(byte, char, short, int, long, float, double, boolean) 배열은 각 항목에 값을 직접 저장.
- 참조 타입(클래스, 인터페이스) 배열은 각 항목에 객체의 번지를 저장.
배열 복사하기
- 배열은 한 번 생성하면 길이를 변경할 수 없음. 더 많은 저장 공간이 필요하다면 더 큰 길이의 배열을 새로 만들고 이전 배열로부터 항목들을 복사해야함.
- System의 arrayCopy() 메소드를 이용해 배열 복사 가능.
https://github.com/bottomsUp-99
728x90
반응형
'Java Study' 카테고리의 다른 글
@Override가 있고 없고의 차이 (2) | 2024.06.30 |
---|---|
상속(Inheritance)이란? (0) | 2024.06.28 |
객체지향 프로그래밍에 대해서... (0) | 2024.06.21 |
메서드 오버로딩(Method Overloading)이란? (0) | 2024.06.20 |
메서드(method)란? (0) | 2024.06.20 |