배열을 선언하려면 배열을 선언하고, 정의하고, 초기화하는 과정이 필요하다. 배열선언에는 배열타입과 배열을 의미하는 []와 배열이름이 필요하다. 선언은 사용할 수 없는 메모리공간에는(힙영역)에는 올라가지 않고, 이름을 보관하는 메모리 공간(스택 영역)에만 올라간다.
배열은 참조 타입이므로 new 키워드를 사용할 수 있다. 참조 타입 배열은 정의에 의해 초기화가 되지 않으며 명시적인 초기화를 해야 한다.
b의 값을 바꾸면 c에는 영향이 없다. b의 값을 바꾸면 a에도 영향을 준다. |
참조에 의한 대입 복사: 같은 레퍼런스를 갖게된다
System.arraycopy :데스티네이션이 준비되면 소스를 데스티네이션에 일대일 복사한다.
클론 : 새로운 배열 객체를 만든 후 배열을 일대일로 복사한다.
배열의 element: String이나 기본 타입 ==> 소스와 데스티네이션이 서로 영향을 받지않는다.
참조타입 ==> 소스와 데스티네이션이 서로 영향을 받는다.
75. 2차원 배열 이해하기
2차원 배열 == 배열에 대한 배열
76. Clone을 이용한 배열 복사하기
SKIP
77. 메서드와 배열의 관계 이해하기
다음 그림은 기본타입의 이뮤터블한 특징을 보여준다. 기본타입을 메서드의 아규먼트로 입력한 후 메서드 안에서 값을 바꾼다. 그 후 copyVInt 메서드를 호출하면 메서드를 구분하기 위한 프레임이 생긴다. 메서드 안에서 값을 변경하고 메서드를 끝내면 프레임과 프레임 위에 있던 변수도 모두 제거된다. 따라서 a와 b는 변하지 않는다.
기본 타입의 값을 변경하려면 리턴받거나 멤버 필드를 직접 변경해야 한다.
다음 그림은 기본타입의 이뮤터블한 특징을 보여준다. 기본타입을 메서드의 아규먼트로 입력한 후 메서드 안에서 값을 바꾼다. 그 후 copyVInt 메서드를 호출하면 메서드를 구분하기 위한 프레임이 생긴다. 메서드 안에서 값을 변경하고 메서드를 끝내면 프레임과 프레임 위에 있던 변수도 모두 제거된다. 따라서 a와 b는 변하지 않는다.
기본 타입의 값을 변경하려면 리턴받거나 멤버 필드를 직접 변경해야 한다.
다음 그림은 아규먼트 a를 이용한 버블 정렬을 보여준다. 다시 말해서, a의 인덱스를 이용하여 큰 숫자는 오른쪽으로, 작은 숫자는 왼쪽으로 보내는 작업을 반복하여 정렬한다. 이때 배열 a의 값이 모두 정렬되면 aa의 값도 정렬된다. 메서드가 끝나면 먼저 a를 제거하고 프레임을 제거한다.
80. 프로그램과 객체(Object) 관계 이해하기
SKIP
81. 객체와 클래스 이해하기
섹션80에서 프로그램과 객체의 관계와 함께 소프트웨어적 시각의 객체에 대한 정의도 살펴보았다. 하지만 객체로만 표시할 경우의 혼동을 방지하려고 현실의 객체를 '객체'로, 소프트웨어에서 말하는 객체는 '인스턴스'로 구분하기도 한다. 간단하게 말하면 자바 프로그래밍은 현실의 객체를 소프트웨어의 객체로 바꾸어 사용하는 것이다.
객체를 생성하는 과정을 보여준다. 현실 객체에서 소프트웨어 객체를 추출하여 객체 간의 관계를 만든다. 이렇게 찾아낸 객체는 추상화 단계를 거쳐 클래스가 된다. 클래스는 객체에 대한 설계도, 거푸집, 붕어빵틀, 템플릿이라고 말하기도 한다. 이렇게 만든 클래스를 사용하려고 메모리에 올리는 과정이 인스턴스화 과정이다. 인스턴스화는 키워드 new를 사용한다. 클래스를 인스턴스화시켜 생성된 객체를 인스턴스라 한다.
82. 추상화와 클래스화
객체 추출 과정은 분석과 모델링 단계를 거친다. 객체지향적인 분석은 관련된 객체를 찾아내는 것이며 모델링은 객체간의 관계성을 밝혀준다. 기본적인 관계성으로 is 관계와 has 관계가 있다. is 관계는 상소관계로 has 관계는 멤버 필드 관계로 발전한다.
추상화 단계이다. 추상화란 '나타내려는 객체의 특징과 목적을 간략하게 표현하는 것'이다. 추상화 과정에는 추상화 단계와 클래스화 단계가 있다. 추상화는 현실의 객체를 단순화시키는 것이며, 클래스화는 추상화된 객체를 소프트웨어 내에서 구체화시키는 것이다.
83. 인스턴스화와 인스턴스
78. Enhanced for(향상된 for 문) 사용하기
for(int en=0;en < aa.length;en++) {
System.out.printf("[%d]", en);
}
Java 5에서 추가된 Enhanced for문이다. 배열의 크기와 인덱스를 사용하지 않고 :을 사용한다. for(타입 변수 : 배열 이름)는 내부에서 배열이름(index)으로 실행된다. 이때 변수와 배열의 타입은 같아야한다. 따라서 en은 내부에서 aa[index]로 바뀌어 실행된다.
79. Variable Arguments(...) 사용하기
Java 5부터 새로 추가된 variable arguments(유동성이 있는 아규먼트 개수, ...)는 메서드의 아규먼트로 사용한다. ...는 타입이 일치할 경우 하나 이상의 변수나 배열을 아규먼트로 받을 수 있다.
80. 프로그램과 객체(Object) 관계 이해하기
SKIP
81. 객체와 클래스 이해하기
섹션80에서 프로그램과 객체의 관계와 함께 소프트웨어적 시각의 객체에 대한 정의도 살펴보았다. 하지만 객체로만 표시할 경우의 혼동을 방지하려고 현실의 객체를 '객체'로, 소프트웨어에서 말하는 객체는 '인스턴스'로 구분하기도 한다. 간단하게 말하면 자바 프로그래밍은 현실의 객체를 소프트웨어의 객체로 바꾸어 사용하는 것이다.
객체를 생성하는 과정을 보여준다. 현실 객체에서 소프트웨어 객체를 추출하여 객체 간의 관계를 만든다. 이렇게 찾아낸 객체는 추상화 단계를 거쳐 클래스가 된다. 클래스는 객체에 대한 설계도, 거푸집, 붕어빵틀, 템플릿이라고 말하기도 한다. 이렇게 만든 클래스를 사용하려고 메모리에 올리는 과정이 인스턴스화 과정이다. 인스턴스화는 키워드 new를 사용한다. 클래스를 인스턴스화시켜 생성된 객체를 인스턴스라 한다.
82. 추상화와 클래스화
객체 추출 과정은 분석과 모델링 단계를 거친다. 객체지향적인 분석은 관련된 객체를 찾아내는 것이며 모델링은 객체간의 관계성을 밝혀준다. 기본적인 관계성으로 is 관계와 has 관계가 있다. is 관계는 상소관계로 has 관계는 멤버 필드 관계로 발전한다.
추상화 단계이다. 추상화란 '나타내려는 객체의 특징과 목적을 간략하게 표현하는 것'이다. 추상화 과정에는 추상화 단계와 클래스화 단계가 있다. 추상화는 현실의 객체를 단순화시키는 것이며, 클래스화는 추상화된 객체를 소프트웨어 내에서 구체화시키는 것이다.
83. 인스턴스화와 인스턴스
84. 자바 메모리 이해하기
스태틱 영역에는 클래스가 컴파일되어 올라가낟. 스택 영역에는 기본적으로 하나의 선입후출 스택 구조를 가지는 영역이 준비된다. 이 곳에 대한 연산과 메서드 블록 변수가 계산된다.
필요한 객체를 생성하여 사용하려면 객체를 위한 힙 영역이 필요하다.포인터와 레퍼런스의 차이 |
댓글 없음:
댓글 쓰기