ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바 TMI_1
    프로그래밍/Java 2023. 10. 11. 15:46

     

    1. 영어권은 문자를 1바이트로 표현이 가능  그러나 비영어권은 2바이트로 표현한다
      자바는 char가 2바이트라 비영어권 문자도 깨지지않고 다 저장가능
      c언어는 1바이트라서 한글같은 문자를 직접적으로 표현할 수 없고 배열을 쓰는 등의 방법을 통해 표현해야함


    2.  메모리공간의 이름을 심볼이라 하는데 그걸 프로그래밍적으로 변수라고 한다



    3. bytecode 는  중간어 코드


    4. 자바는 컴파일하면 class 파일로 만들어준다.
      어떤 OS에서 실행할지 모르기 때문에 확실하게 exe코드로 만들지 못하고 어중간하게 만들어둔 것

      이것을 JVM에게 맡기는 형태이다.
      JVM이 1차 컴파일된 bytecode (.class)를 자신의  OS에 맞게 다시 컴파일 (.exe) 하여 메모리에 로딩하여
      실행하기 때문에 자바는 OS에 독립적으로 실행이 가능한것

      다만 컴파일을 두번 해야하므로 (2페이스 컴파일) 바로 실행가능한 다른 언어에 비해 실행이 느릴 수 있다.

    5. JVM의 메모리 모델 (Runtime data area)
      Thread 안에 4개의 공간이 존재한다.
      JVM이 어떠한 클래스 파일을 실행할 때 4가지 형태의 메모리를 이용해서 구동

      - method area
      - heap area generation
      - stack area (call stack frame area), PC register Native method area
      - runtime constant pool (literal pool)


    6. 자바에서는 배열도 하나의 객체로 취급한다
      자바는 여러개가 붙은 덩어리 구조일 경우 오브젝트로 본다
      그래서 배열도 같은 타입 여러개가 붙어있는 구조이므로 객체로 취급한다

      배열은 인접함 + 연속적  2가지 특징이 있으므로 index를 0부터 쭉 붙여서 부를 수 있다.


    7. 2차원배열은 영상처리에서 이미지 처리에 주로 사용된다


    8. row-major 방식   (행 우선할당)


    9. 매개변수 전달기법
      Call by Value     값을 전달
      Call by Reference    주소값을 전달.  자바는 거의 이것을 사용함.



    10. 정적 바인딩 : 컴파일 시점에서 사용될 메소드가 결정되는 바인딩
      오버로딩은 정적 바인딩을 적용하기 때문에 이 메소드가 어떤 매개변수를 가지고 있는지 일일이 대조하면서 검색시간을 잡아먹지 않는다.
      컴파일 시점에 딱 어떤 메소드가 사용되는지 정해져있다.

      우리는 메소드를       value (int a, int b)         value (double a, double b)   이렇게 저장해서 이름이 같은 메소드가 2개로 보이지만
      컴파일러는  value_int_int(int a, int b)     value_double_double(double a , double b)     이런 형식으로 저장한다.

      그래서 메소드 오버로딩은 속도나 검색성능이 떨어지는 원인이 될 수 없다.

      Q.  그럼 동적 바인딩은 뭘까?
        동적 바인딩은 오버라이딩에서 나오는데 이것은 실행속도가 떨어지는 원인이 된다.
        다음 TMI 글 쓸 때 상세한 내용을 찾아볼 것



    11. 객체 = Value Object  (여러개의 메모리가 하나의 밸류의 형태로 만들어지기때문) 
      = Data Transfer Object (데이터를 이동하기 위해 만들어진 객체)



    12. 생성자메소드 (Constructor)  :  객체를 메모리에 생성하는 역할

      new  생성자메소드()
      - new 연산에 의해 호출됨
      - 자신이 가지고 있는 멤버들을 메모리에 올려 객체를 생성하는 역할
      - 메소드 이름은 클래스 이름과 동일해야 한다
      - 접근제어자가 public 인 경우에만 호출이 된다
      - 모든 클래스는 기본생성자를 가지고 있다.   (기본 생성자 : 객체를 생성하는 역할)
      - 객체의 초기화를 위해 사용된다
      - 생성자 메소드는 리턴타입이 없는 것이 특징임.   
        하지만 생성자메소드는 void를 사용하지 않는다.

      this
      자신을 가리키는 객체변수, 참조변수, 포인터변수
      -> 객체가 만들어진 다음에 객체 자기자신을 가리키는 this라는 객체가 내부적으로 또 만들어진다.



    13. 상속은 왜 extends 인가?
      상속의 extends는 메모리가 확장되기 때문에 저런 이름을 쓰게 되었다.
      상속관계는 가장 상위 클래스부터 메모리가 만들어진다.    (부모보다 자식이 먼저 만들어질수는 없기때문)
      맨 위에서부터 객체가 만들어져 내려오는 형태를 상속체인이라고 한다.


    14. 가변길이배열
      int[][] a= new int[5][]; 
      이렇게 열부분을 비워두면 에러가 아닌 가변길이 배열이 된다.

      a[0] = new int[2];
      a[1] = new int[4];
      a[2] = new int[1];

      이렇게 열길이를 나중에 지정해서 사용가능


    15. Import 대신  직접 써도 된다.
      scanner 사용시
      java.util.scanner 이라고 일일이 적어주면 된다.
      이를 줄이기 위해
      import java.util.*;  을 사용하면 
      scanner만 적어줘도 동작한다.

     

     

    강의를 듣다가,  따로 공부를 하다가 노션과 메모장에 정리해둔 것들을 모아서 정리해둔 페이지

    '프로그래밍 > Java' 카테고리의 다른 글

    깔끔한 코드 작성에 관한 의문 (과 해결)  (0) 2023.11.14
    자바 TMI_3  (0) 2023.10.26
    자바 TMI_2  (0) 2023.10.13
    java.time.패키지  (0) 2023.04.05
Designed by Tistory.