너무 초보적인 질문이긴 한데 책을 보라든지 검색해보라고만 하지 마시고 간단하게라도 알려주신다면 감사하겠습니다.
ArrayList<String> phones;
public ArrayList<String> getPhones(){
return phones;
}
만약 이렇게 정의한 함수가 있다면 리턴될때 Array의 포인터가 리턴되는 것인가요 아니면 값이 복사되는것인가요?
마찬가지로 Array를 Parameter로 받을때도 같은 문제인데요
C에서는 포인터로 넘길지 값으로 넘길지 명확하게 구분이 되는데 자바에서는 기본적으로 어떻게 처리되는것인지
자바에서는 call by reference는 지원이 안되는것으로 알고 있는데 그렇다면 이럴때 Array가 전체 copy되어서
메모리를 두배로 차지하게 되는건가요?
그리고 보통 이런식으로 다른 클래스간 메소드호출로 값전달할때 어떤식으로 전달을 하시나요?
단순히 String이나 Int값이라면 상관없지만 Array나 Class변수를 전달해야된다면 고민이 되는 문제인데요.
클래스를 통째로 전달한다거나 메인 클래스에 있는 클래스값을 하위클래스들에서 공유하고 참조해야된다면
예를 들면 앱 전체에서 공유해야되는 정보를 모아둔 클래스를 Activity에 생성하고 하위 View들에서
공유하고 참조 하고 싶다면 이럴때는 어떻게 구현을 하는게 좋을까요?
단순히 Activity하나만 본다면 멤버 변수로 클래스를 선언하고 하위 view에서 Activity로 접근하면 될것 같긴한데
다른 Activity들 끼리의 공유 그러니까 하나의 앱 전체에서 접근하고 관리하려면 어떤것이 효율적일까요?
예를 들면 C에서는 공통으로 사용하는 변수나 상수를 헤더파일 하나에다 정의하고 다른파일들은 모두
그 헤더파일을 인클루드 시켜서 접근하는것이 가능한데
이런식의 구현을 자바에서는 어떻게 해야하는것인지...
주변에 자바를 아는 사람이 있으면 그냥 물어볼텐데 책만 보고 찾아보기엔 너무 답답하네요.
java의 primitive type에 대해서는 call by value 가 맞지만
클래스 형태는 call by reference 입니다.
그냥 클래스는 전부 포인터형이라고 보시면 되겠습니다. 따라서 용량이 2배로 늘어나진 않습니다.
물론 클래스 타입을 call by value로 deep copy 가능합니다.
공통적으로 사용하실 수 있는 방법이 여러가지 있는데
public static 형태의 변수를 만드셔도 되고
클래스 하나를 싱글톤으로 하셔도 됩니다.
보통의 경우에는 Application 클래스를 활용합니다.
리소스의 성격에 따라서 잘 사용하시면 될 것 같습니다.
자바에서 call by reference가 지원이 안된다는 것은 어디서 들으신건지 모르지만 알려준 분한테 딱밤한대 날려주세요.
객체형의 클래스들은 전부 레퍼런스 호출 방식입니다.
new를 이용해 클래스를 생성하게 되면 메모리상에 공간이 할당이 되고
그 메모리의 주소값이 변수에 저장이 됩니다. 그 주소로 접근이 되는 것이죠.
기본자료형(자바책이있으시다니 보시면 구분되있습니다)의 경우에는 레퍼런스가 아닌 값을 직접 참조를 합니다.
그외의 모든 객체는 레퍼런스 주소값을 가지고있습니다.
새로운 객체를 만들기 위해서는(메모리 2배로 사용하려면) new를 이용해서 객체를 다시 생성해야합니다.
자바에서는 공용되는 변수는 클래스를 만들어 사용하거나(상수의 경우)
상속을 이용하여 부모의 클래스에 정의해두고 자식 클래스에서 사용하거나 합니다.
안드로이드 같은 경우에는 Application 클래스를 상속받아 만들고 메니페스트에 등록하여
해당 앱에서 어디서든 접근 가능한 변수 및 메소드를 만들수 있습니다.