ㅇTL
Chap5-2 본문
Variables and Memory
* 모든 값은 1바이트 이상
- 메모리는 데이텉를 byte 단위로 연속적으로 저장하는데 사용됨
- 메모리 저장 -> memory location
- 데이터의 address = memory location의 첫번째 byte의 주소
primitive type (기본형 타입)
-> 실제 값을 메모리에 저장함. 해당 주소에 해당 값을 저장한다 (당연)
(변수에 할당된 memory location에 저장한다고 표현)
class type
-> 메모리에 memory address를 저장함 ! (reference를 저장한다 !)
(변수에 할당된 memory location에 memory address/reference를 저장한다고 표현)
- 클래스에 대한 데이터는 다른 곳에 저장되고, 해당 주소를 해당 변수에 저장함 !
( object는 다른 곳에 저장됨 )
- class변수는 fixed size (primitive와 마찬가지, 주소만 저장하니까) , object 변수는 any size도 될 수 있음 ! (다른곳에 저장되면서)
* 여기는 c처럼 주소를 표현하고 *,& 쓰고 그러는거아니고
클래스 변수 자체가 reference를 담는 reference 변수임 -> 그냥 클래스이름.멤버 이렇게 접근함
그렇지만 변수 자체가 주소 저장함! 그치만 . 으로 멤버에 접근함
(함수에 그냥 클래스 타입으로 넘겨줘도 call by reference로 작동함 ! 다 바꿀 수 ㅇ ~ 애초에 주소가저장되어있는거니까)
= references !
클래스 변수 = reference variable !
- 여러 reference var은 하나의 같은 reference를 담고잇을 수 ㅇ (당연)
* reference 관련 주의 사항
어떤 클래스 내부에 멤버로 다른 클래스 변수가 들어잇다고 가정
private Date born; 이런식으로. (private -> 외부에서 꼭! 접근 못해야함. 당연)
이를 초기화해주는 constructor의 copy constructor 내에서
Date (aDate) {
this.born = aDate.born
} 이럴 수 있고
그냥 constructor에서
Date (a, born, c) {
~어쩌구~
this. born = born
} 이런식으로 이미 존재하는 객체에 대해 레퍼런스로 받으면
둘은 같은 객체를 나타내게 됨 ! 둘은 같은 주소값을 저장함 !
-> 그러면 외부에서도 private임에도 접근 가능함 (밖에서도 해당 객체를 가리키고 있으니까)
-> 해결 방안?
= 클래스 멤버 변수에 클래스 타입이 있으면 그냥 = 으로 값 넣어주지 않는다.
copy constructor을 사용하여 내용만 복사해온다 !!
born = new Date(aDate.born); 이런식으로 복사만 함 !!
* String은 가능 . Immutable 이기 때문에 ~~
Parameter
자바의 모든 parameter은 call-by-value !
- primitive type : parameter 값 변화는 argument값에 영향 주지 x
- class type : parameter 값 변화는 argument에 영향 줌 !!
-> reference(주소)를 넘겨주기 때문 -> call-by-reference와 유사하게 작동한다 ! (그치만 콜바이벨류임)
** call-by-value이기 때문에, 넘겨준 그 reference 주소는 당연히 !! 변경 불가 !!
같다
1. ==
: 레퍼런스가 동일한지 검사함 (주소가 같은지) 단순히 객체의 주소를 비교하는 것이다 ~~
(primitive에서는 걍 값 같은지 봄)
2. a.equlas(b)
: 객체의 내용을 비교하기 위함 ! 내용이 같으면 true.
+) a=b
: 이건 b의 copy가 a에 들어가는 것 ~ (class일 경우 둘은 한 객체를 가리키게 됨. 같은 값을 저장함(같은 주소를))
null
= 클래스 type 변수에 할당될 수 있는 특수한 상수 ! -> object가 주어져잇지 않다, 어떤 object도 가리키지 않는다 라는 의미 !
String str = null; 이런식으로 가능
- null은 객체가 아님 , a kind of placeholder for a reference that doesn't name any memory location 임 !
- 메모리 주소와 유사 -> 변수에 null이 포함되어 있는지 테스트 하려면 ' == ' 연산자 사용해야함 ! (equals 대신에.)
(하나에 저장되어잇는 듯)
new - anonymous objects
- new = 객체를 초기화하는 생성자를 호출하고, 생성된 객체의 메모리 주소를 반환함 ! (그래서 클래스 변수가 주소값을 저장하게 되는 것 인듯!)
- Anonymous Object : new 객체로 생성하여 반환 받은 주소를 변수에 할당하지 않는 것
ex) variable1.equls(new ToyClass("Ds", 32)) 이런식으로 ! 변수에 할당 안된 object
Copy constructor
: 기존의 생성한 객체를 복사하기 위한 생성자 ! -> 클래스와 동일한 타입의 매개변수를 받음 !
( 동일한 값을 갖는 새 변수를 만든다. 당연히 만들어지는 애는 값만 같지, 다른 레퍼런스를 갖는다. 다른 객체이다. 아예 새로 선언한 다른 친구니까)
Mutable & Immutable
Mutable = 외부에서 해당 값을 바꿀 수 있는거. String을 제외한 class type 변수 ! 레퍼런스 통해 해당 값에 접근할 수 있는 것
(해당 변수가 한 메모리에 할당되어 저장되고, 다른 변수로 해당 값을 바꿀 수 있음)
** class 내에 값 변경 가능한 method가 잇다. 그러므로 절대 return mutable_object 이거하면 안댐! 변경 가능 !!
Immutable = 외부에서 내용 바꿀 수 없는거. = 하면 값만 복사되고 단순히 그 값을 저장하는 것. 해당 값 int 3 이런게 바뀌는게아님
* immutable class : constructor을 제외하고 data의 값을 바꿀 수 있는 method를 가지지 않은 것 !
-> immutable object. 대표적인예) String !
* String -> class type이지만 immutable !
-> String a = "asd"; String b = a; 해도됨
그래도 다른 값 가리킴 ! 값만 복사됨 !!!
Deep Copy VS Shallow Copy
• deep copy = 객체 복사시, '실제 값'을 새로운 메모리 공간에 복사하는 것을 의미. 값이 copy된 새로운 ㄱ낵체를 가짐
• shallow copy = 해당 변수가 가지고 있는 값을 단순히 복사한다.
-> 객체를 복사할 경우, 레퍼런스 복사한다 ! 주소를 복사한다. -> 같은 레퍼런스공유하므로 privacy leak위험 !
(그냥 = 으로 하는 것. deep copy 제외한 모든 카피)
** deep copy 를 해야한다 ~~ **
Packages
: java의 library ! java는 모든게 class이므로, class의 모음으로 볼 수 있다. library of classes
- 서로 관련 있는 클래스들의 모음.
- 프로젝트를 편리하게 관리하도록 함 !
- 다른 라이브러리들끼리 구분 가능
- import 키워드로 클래스 불러와서 간단히 사용 가능 (import statement 라 부른당)
- java.util이란 package에잇는 모든 클래스를 부르고 싶을 땐
-> import java.util.* ; 하면 댐 (여기엔 추가적인 오버헤더 없음 !! 굳)
- java.lang 패키지 -> 자바 프로그래밍에 기본적인 classes를 포함함
-> 자동으로 선언된다 !! imported automatically 이므로 import statement 필요 없음 ~~
( Math, String 이런거 잇슴 )
- 패키지에 클래스들 묶는 법 = class file 맨 앞에 package package_name; 하면 됨 !!
-> 이 문구 앞에는 공백/주석 빼고는 아무것도 올 수 없음 !
사용 ex
- Scanner ! from java.util
-> 사용시 import java.util.Scanner 이렇게 불러옴 (.는 멤버/하위를 부르는 것)
'2-1 > 객체지향 - java' 카테고리의 다른 글
Chap 7. Inheritance (상속) (0) | 2022.04.12 |
---|---|
Chap 6. Arrays .. (0) | 2022.04.06 |
chap 4. class (0) | 2022.04.02 |
Chap 1,2 (0) | 2022.03.30 |
chap.5 - static 등등 (0) | 2022.03.26 |