과제제출했는데 하나 빠꾸먹은게 있어서 설명좀 받고싶습니다.
Day, Account, test 클래스가 있는데 계좌개설일을 가리키는 Day는 연,월,일을 변수로, Account는 이름,계좌번호,예금,Day클래스변수를 변수로 가짐.
Day는 간단해서 넘기고 Account 생성자는 Account(string name, int num, long balance, Day day){....... this.day = day} 이런 식임.
test는 Account 인스턴스를
Day day = new Day(2021,05,05)
Account account1 = new Account(윾식, 1111111, 10000, day)
이렇게 두 개 하드코딩해서 출력하는 간단한 내용인데 문제는, 계좌개설일 즉 Day클래스의 변수를 인스턴스생성 이후에 클래스 밖에서 변경못하게 하라는 조건이 있어서 Day의 변수들을 private final선언함
근데 교슈님이 정확하게 'final선언해서 변경할수 없을것처럼 보이지만 문제가 있음. 참조대상을 변경할 수 없을뿐이고 참조하는 객체의 조작은 가능하다. 기본데이터형의 final은 상수로 봐도 되지만 클래스형의 final은 주의해라' 라고 하셨음. 저 참조대상 어쩌고 부분이 무슨소린지 잘 모르겠음;;
혹시 Account 생성자의 this.day = day부분에서 문제가 있는거임? 자바는 이럴때 참조로 넘기니까 this.day는 결국 day여서 account의 this.day값을 바꿔도 day값 변경은 안될 것 같은데 잘못 알고 있는게 있으면 알려주십쇼...
Day, Account, test 클래스가 있는데 계좌개설일을 가리키는 Day는 연,월,일을 변수로, Account는 이름,계좌번호,예금,Day클래스변수를 변수로 가짐.
Day는 간단해서 넘기고 Account 생성자는 Account(string name, int num, long balance, Day day){....... this.day = day} 이런 식임.
test는 Account 인스턴스를
Day day = new Day(2021,05,05)
Account account1 = new Account(윾식, 1111111, 10000, day)
이렇게 두 개 하드코딩해서 출력하는 간단한 내용인데 문제는, 계좌개설일 즉 Day클래스의 변수를 인스턴스생성 이후에 클래스 밖에서 변경못하게 하라는 조건이 있어서 Day의 변수들을 private final선언함
근데 교슈님이 정확하게 'final선언해서 변경할수 없을것처럼 보이지만 문제가 있음. 참조대상을 변경할 수 없을뿐이고 참조하는 객체의 조작은 가능하다. 기본데이터형의 final은 상수로 봐도 되지만 클래스형의 final은 주의해라' 라고 하셨음. 저 참조대상 어쩌고 부분이 무슨소린지 잘 모르겠음;;
혹시 Account 생성자의 this.day = day부분에서 문제가 있는거임? 자바는 이럴때 참조로 넘기니까 this.day는 결국 day여서 account의 this.day값을 바꿔도 day값 변경은 안될 것 같은데 잘못 알고 있는게 있으면 알려주십쇼...
Day 클래스의 인터페이스 중 내부 상태를 바꾸는게 있다면 불변이 아님
final ArrayList 에 항목 추가같은거 해봐
day의 참조를 바꿀 순 없는데(다른 인스턴스로 변경 불가) 객체의 내용을 바꿀 순 있음(멤버 필드 변경 가능)
네 이름은 영원히 김철수지만 네 몸의 구성성분은 바뀔 수 있다 이거지.
그런 당신을 위한 dart
final이 하는 역할은 필드가 가리키는 값을 바꾸지 못하게 하는거지 상태마저 freeze 하는건 아님 - dc App
primitive 값을 변수에 할당한다면 본문에 있는 얘기가 맞겠지만 object을 할당할경우 다르게 봐야함 - dc App
java는 기본적으로 오브젝트를 사용하고, 모든게 참조로 이뤄져있음 (값전달 참조전달 얘기가 아님) - dc App
오브젝트를 가리킨다는 것은, 항상 동일한 객체를 가리킨다는 뜻이지만 그 객체의 "상태"가 동일하다는 뜻은 아님 - dc App
즉, 객체 foo를 가리키지만 foo.bar 가 1인지 2인지 3인지는 보장을 못해준다 이것 - dc App