'2015/09/14'에 해당되는 글 2건

  1. 2015.09.14 Call By Value vs Call By Reference
  2. 2015.09.14 빅 엔디안(Big Endian) vs 리틀 엔티안(Little Endian)

자바의 call by value와 call by reference에 대해서 설명해보겠다.

흔히 C와 C++에서는 주소값을 저장하는 포인터 변수와 레퍼런스 변수를 사용하는데 자바에서는 이러한 개념이 없지 않은가?


결론은

원형 타입(primitive)타입일 때는 call by value가, 객체 타입(Object)타입일 때는 call by reference가 사용된다. 


객체가 넘어가면 Call By Reference로 동작한다고 했다.

그렇다면 다음은 어떻게 동작하겠는가??

public class Test4 {
 
    int a;
    public Test4(int a){
        this.a = a;
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Test4 t = new Test4(1);
        int i = 5;
        changeInt(i);
        System.out.println(i); // (1)       
        changeTest(t);
        System.out.println(t.a);    // (2)
        changeTestInt(t);
        System.out.println(t.a); // (3)
    }
    public static void changeInt(int a){
        a = 10;
    }
    public static void changeTest(Test4 t){
        t = new Test4(100);
    }
    public static void changeTestInt(Test4 t){
        t.a = 10;
    }
}
 
cs


(1) 5

=> int 형은 primitive 타입이기 때문에 call by value다. 그래서 함수를 지나면 지역변수가 사라지게 된다.

(2) 1

=> 메서드 안에서 new로 객체가 할당되었다. 그리고 외부 변수에 대입해주었다. 

그렇다면 new로 생성한 값 100으로 연결되어 되지 않은가? 하지만 아니다. new로 할당된 객체도 지역이 종료되면 없어진다.

(3) 10

외부에서 주입된 t에 대해서 값을 변경시켜주는 메서드를 실행했다. 값이 바뀐다. 


아무래도 난해했던 것은 (2)이 아닐까 싶다. 










'JAVA' 카테고리의 다른 글

자바 classpath  (0) 2015.11.03
Java finalize  (0) 2015.10.26
List, Map, Set - Collection  (0) 2015.08.29
자바 8 특징  (0) 2015.08.29
volatile 키워드 vs synchronized 키워드  (0) 2015.08.29
Posted by slender ankles
,

빅 엔디안과 리틀 엔디안의 차이에 대해서 설명해보겠다.

아주 간략하게 설명하고, 필요하다면 사족을 붙여야겠다.


바이트 오더?

바이트를 배열하는 방법을 말한다. 그 배열하는 방법을 엔디안(Endian)이라고 한다.


빅 엔디안(Big Endian)

주로 Unix시스템인 RISC프로세서 계열에서 사용하는 바이트 오더이다. 

메모리 시작 주소가 상위 바이트부터 기록된다는 것.

* 메모리 시작 주소에 상위 바이트부터 기록*

ex) 4바이트(32bit)값 0x01020304 를 빅엔디안 순서로 메모리에 입력되는 과정을 보면 다음과 같다.

그림을 설명하자면 네모 한칸이 메모리 한 번지를 의미하며, 하위 주소에서 상위 주소로 주소 번지가 증가함을 의미한다. 


리틀 엔디안(Little Endian)

주로 인텔(Intel)프로세스 계열에서 사용하는 바이트 오더이다. 

메모리 시작 주소가 하위 바이트부터 기록된다는 것.

* 메모리 시작 주소에 하위 바이트부터 기록*

ex) 4바이트(32bit)값 0x01020304 를 리틀엔디안 순서로 메모리에 입력되는 과정을 보면 다음과 같다.


그림을 설명하자면 네모 한칸이 메모리 한 번지를 의미하며, 상위 주소에서 하위 주소로 주소 번지가 증감함을 의미한다. 


** 쉽게 설명하자면 빅 엔디안은 왼쪽에서 오른쪽으로, 리틀 엔디안은 오른쪽에서 왼쪽으로 읽으면 된다. 


네트워크 바이트 오더?

네트워크 상에서 표준으로 이용되는 프로토콜은 네트워크 바이트 오더인 빅 엔디안이다.



'네트워크' 카테고리의 다른 글

TCP Three-way Hand Shaking  (0) 2015.10.06
동기 vs 비동기  (0) 2015.10.06
GET방식 과 POST방식  (0) 2015.08.08
HTTP 와 HTTPS  (0) 2015.08.08
HTTP 프로토콜  (0) 2015.08.08
Posted by slender ankles
,