Ch06. 객체와 배열
객체 (Object)
- Object 객체 의 구성요소
- 속성 Attributes : 객체의 특징, 데이터 ID, 날짜, 금액, 크기, 상태 등
- 클래스에서 변수로 정의
- 기능 Operations : 객체의 기능, 동작 값 셋팅, 값 보여주기, 계산 등
- 클래스에서 메소드로 정의
- ID : 객체 ID는 JVM에서 내부적으로 각 객체의 고유 식별자
- 속성과 기능을 객체의 멤버 구성요소 라고 한다
- 멤버 변수, 멤버 메소드
- 속성은 특정 데이터 또는 다른 Object가 될 수도 있다 고객 객체의 속성으로 주문 객체가 있을 수 있다
- UML : 객체지향분석과 설계를 위한 모델링 언어로 시스템 개발과정의 원활한 의사소통을 위한 표준화 언어
용어 구분
- Class, Object, Instance 용어 구분
- 클래스 Class : 붕어빵 틀 Template = 하나의 붕어빵 틀로 수많은 붕어빵 객체를 만들 수 있다
- 객체 Object : 붕어빵 들 , 객체는 인스턴스를 포함하는 일반적인 의미
- 인스턴스 Instance : 각각의 붕어빵 인스턴스는 클래스를 통해 생성된 객체의 한 예이다
- 인스턴스화 Instantiate : 붕어빵을 굽다 클래스로부터 인스턴스를 생성하는 것
클래스, 객체, 인스턴스의 차이점
클래스 | 객체 |
제품 설계도 | 제품 |
TV 설계도 | TV |
붕어빵 기계 | 붕어빵 |
만들어진 인스턴스 마다 속성이 다르다 각가 다른 메모리에 생성됨
객체의 생성과 Object reference variables
- class로 부터 인스턴스를 생성할 때는 new 라는 키워드를 사용한다
- Step 1 : 선언
- ClassName identifier;
- Order orderVar; <- Object reference variable 선언
- Step 2 : 초기화
- identifier = new ClassName ;
- orderVar = new Order ;
- 선언과 생성을 같이 할 수 있다
- ClassName identifier = new ClassName ;
- Order orderVar = new Order ;
객체 참조 변수의 초기화
- new 라는 키워드로 인스턴스를 생성시에 멤버변수들은 각 데이터 타입의 기본값 Default Value 로 초기화 된다
자료형 | 기본값 |
boolean | false |
char | '\u0000' |
byte | 0 |
short | 0 |
int | 0 |
long | 0 |
float | 0.0F |
double | 0.0D |
All reference type | null |
- 객체를 초기화한다는 것은 객체에 데이터를 저장하는 것을 의미한다
- 참조 변수를 통해 객체를 초기화 할 수 있다
- 생성된 인스턴스의 멤버 변수나 메소드 에 접근할 때는 dot . 을 사용한다
- 앞의 예제에서 참조 Reference 변수는 stack 영역에 참조할 수 있는 값 주소 만 을 저장하며, 실제 할당된 데이터들은 Heap 영역에 Student 객체내의 멤버 변 수들에 저장된다
객체 참조 변수 - Memory
- 객체는 아래와 같은 순서로 초기화되고 메모리에 할당된다
① 선언된 상태에서는 메모리의 reference를 위한 공간만을 할당함
② new 연산자를 사용해야만 MyDate를 위한 공간이 할당됨
③ 멤버들의 명시적인 초기화
④ 생성자를 실행
⑤ 변수에 Reference값 할당
public class MyDate {
private int day = 1;
private int month = 10;
private int year = 2000;
public MyDate (int day, int month, int year) {
this.day = day;
this.month = month;
this.year = year; } }
- 기존에 생성된 Reference 변수에 다른 Reference 변수를 할당하면 기존의 Reference를 끊고 새로운 인스턴스를 Reference 한다
int counter = 10;
Student std = new Student ;
Student otherStd = new Student ;
std = otherStd; <-otherStd와 동일한 인스턴스를 Reference 한다
문자열을 저장하는 Reference type의 class로 Java API java.lang.* 내에 포함되어 있다
String class는 new 키워드를 사용하는 방법과 new 키워드 없이 생성하는 두 가지 방법 을 제공한다
String 문자열은 객체는 Heap Memory내에서도 문자열 리터널 값을 String Pool에 저 장해놓고 동일한 문자열을 생성하면 동일한 리터럴 값의 주소를 할당해준다
new로 생성한 경우엔 일반 객체처럼 Heap 영역에 값으로 생성된다
- 선언
ClassName identifier;
String myName;
- 문자열 생성 및 값 할당
identifier = new ClassName (“문자열” );
myName = new String (“홍길동”) ;
String myName = new String (“홍길동”) ;
String myName = “홍길동”; <- new 키워드 없이 생성
배열(Array) 정의
- 배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것으로 reference type 변수 를 지원한다
- 자바 프로그래밍 언어에서 배열 Array 은 동적으로 생성되는 객체이며, Object 타입의 변수로 할당된다
- 배열은 Object 클래스의 모든 메소드를 호출할 수 있다
- 배열의 컴포넌트는 0에서 n-1까지의 정수 인덱스를 사용하여 reference한다
- 배열안에 포함된 변수는 이름은 없다
- 이 변수를 배열의 ‘컴포넌트 component ’라고 부르며, 배열이 n개의 컴포넌트를 갖고 있다면, n을 그 배열의 ‘길이 length ’라고 한다
배열(Array) 선언 및 할당
- 배열은 타입 또는 변수이름 뒤에 대괄호 (“[ ]”) 를 붙여서 선언한다
- 배열 선언 후 할당을 해야만 값을 저장할 공간이 생성된다
- 배열은 객체이며 Object reference variable이다. 기본형 Primitive type , 참조형 Reference Type 을 다 선언하여 사용할 수 있다
- 선언과 할당 Case 2의 경우 선언과 할당을 동시에 한다.콤마로 구분하여 입력된 개수만큼 배열을 생성한 후 값을 할당
- 생성된 배열 인덱스마다 값을 저장 한다
- 값을 저장할 때는 저장할 배열의 위치 index 를 지정하고 배열 선언시 지정 했던 데이터타입에 맞는 값을 할당한다
- index 선언은 0부터 시작한다 (지정한 배열개수 -1)
예) int[] ages = new int [5];
ages[ 0 ] = 20;
ages[ 1 ] = 15;
ages[ 2 ] = 33;
ages[ 3 ] = 42;
ages[ 4 ] = 19;
배열의 활용
- Array Length : ’배열이름.length’는 배열의 크기를 알려준다
int[] ages = { 20,100, 72, 32, 50 };
for int i = 0; i < ages.length; i++ {
System.out.println (ages[ i ]) ;
}
- 배열의 예외 Exception : 배열의 접근시 int 값으로 해야 하며, long type은 compile time에 에러를 발생시킬 수 있
long longLength = 10L
long longTypeArray = new long[longLength] <= compile error..
- 배열에 대한 접근은 runtime에 확인되며, 0보다 작거나 배열 길이보다 크거나 동일한 index 배열의 length와 동일한 값으로 배열은 length-1 까지의 index를 가진 다 를 사용 하면 ArrayIndexOutOfBoundException이 발생한다
- 만약 배열의 사이즈의 정의할 때 음수를 사용하게 되면 NegativeArraySizeException이 발생한다
배열의 메모리
- 기본 데이터형 배열 (Primitive Type Array)
- 참조형 배열 Reference Type Array
haOrder order = new Order ;
Order[] orders = {
new Order 1, "라면" ,
new Order 2, "세제" ,
new Order 3, "과자" }
다차원 배열(Array) 선언 및 할당
- Spreadsheet와 비슷하다. rows and columns
- 1차원 배열과 Syntax가 비슷하며 ‘[]’ 개수가 차원의 수를 의미한다
- 2차원 이상의 배열은 가변적으로 생성할 수 있어 가변 배열이라고도 한다
2차원 가변 배열의 예
int[ ][ ] ages = new int[5][ ];
ages[0] = new int[4];
ages[1] = new int[2];
ages[2] = new int[2];
ages[3] = new int[3];
ages[4] = new int[2];
* 값 할당
ages[0][1] = 20;
…
ages[4][1] = 17;
Cint[ ][ ] ages =
{
{ 20, 15, 33, 72 },
{ 12, 50 },
{ 57, 20 },
{ 27, 32, 89 },
{ 73, 17 }
}