[TIL] 자바 개념정리

TIL / / 2021. 9. 25. 00:48
  • 가비지 컬렉션 : 유효하지 않은 메모리 주소인 가비지를 정리해주는 프로그램을 말한다.

참조되지 않는 객체들을 정리해 Heap의 가용공간을 만든다.

장점: 프로그래머가 직접 메모리를 정리하지 않아도 되어 개발속도가 향상된다.

단점: 메모리를 언제 되찾을 지 결정하기 위한 오버헤드 비용이 발생(참조세기,표시세기 등 여러알고리즘 존재)

 

  • Vector와 ArrayList의 차이는 동기식과 비동기식의 차이이다.
    Vector는 동기식이라 한 스레드가 해당 벡터 작업중이면 다른 스레드에서 동시 작업이 불가능하다.
    ArrayList는 비동기식이라 여러 스레드가 동시에 ArrayList에서 작업이 가능하다.

  • String / StringBuffer / StringBuilder 차이
    String은 immutable(불변) 속성이라 문자를 수정하려면 다시 메모리에 생성해야한다.
    StringBuffer는 가변하고 동기화를 지원해서 멀티스레드 환경에 적합하다.
    StringBuilder는 가변하고 동기화를 고려안해서 싱글스레드에서 성능이 좋다.

  • Serialization : 객체의 상태 혹은 데이터 구조를 기록할 수 있는 포맷으로 변환하는 기술

직렬화(Serialize) :자바 시스템 내부에서 사용되는 Object 또는 Data를 외부의 자바 시스템에서도 사용할 수 있도록 byte 형태로 데이터를 변환하는 기술. JVM(Java Virtual Machine 이하 JVM)의 메모리에 상주(힙 또는 스택)되어 있는 객체 데이터를 바이트 형태로 변환하는 기술

역직렬화(Deserialize) :byte로 변환된 Data를 원래대로 Object나 Data로 변환하는 기술을 역직렬화(Deserialize)라고 부릅니다.직렬화된 바이트 형태의 데이터를 객체로 변환해서 JVM으로 상주시키는 형태.

java.io.Serializable 인터페이스를 상속받은 객체는 직렬화 할 수 있다.

 

  • Java의 메모리 영역 (메소드 / 스택 / 힙)

메소드 : 전역변수, static변수, 클래스 정보 등 저장
스택 : 매개변수, 지역변수 저장
힙 : new 로 생성된 객체,

ex) Person p = new Person(); 이라는 소스를 작성했다면 Person p는 스택 영역에 생성되고 new로 생성된 Person 클래스의 인스턴스는 힙 영역에 생성된다. 즉, 스택 영역에 있는 p가 힙메모리에 있는 값을 참조하고있다.

  • 오버로딩 과 오버라이딩
    오버로딩 : 메소드 이름은 같고 매개변수를 다르게(수나 타입) 해서 다형성 구현 ex)println
    오버라이딩 : 동일 메소드이름,매개변수,리턴타입으로 부모클래스로 부터 상속받은 메소드를 재정의하여 다형성 구현


  • 추상클래스와 인터페이스
    공통점  : 구현은 하지않고 선언만 있는 클래스, 객체를 생성할수없다.(인스턴스화X)
    차이점: 추상클래스의 목적은 상속을 받아서 해당 기능을 반드시 확장시키는 것!  
              인터페이스의 목적은 구현하는 모든 클래스들에 대해 특정 메소드들이 반드시 존재하도록 강제하는 역할|

  • 접근지정자 : public > protected > package (default) >private
  • Call by Value  와 Call by Reference 
    값에의한 호출 : 값을 복사해서 새로운 함수로 넘김 ( 원본값 변경 X)
    참조에 의한 호출 : 주소값을 인자로 전달 ( 원본값 변경O)

  • 배열 과 연결리스트
    배열은 크기 불변 (인덱스 통해서 접근속도 빠름) / 연결리스트 가변적 ( 링크를 따라 접근하여 속도 비교적 느림)
  • Java컴파일 과정 
    컴파일러가 소스코드(.java)를 자바 바이트코드(.class)로 변환 --> JVM이 바이트코드를 기계어로 변환후 실행

  • JAVA언어의 특징
    운영체제의 독립적 : OS에 상관없이 JVM만 깔려있다면 JVM이 자바 응용프로그램을 해당 운영체제에 맞게 변환하여 실행
    객체지향 언어 : 상속, 캡슐화, 다형성
    자동메모리 관리 : 가비지컬렉터가 자동적으로 메모리관리
    단점 : 속도문제가 있지만, JVM의 JIT컴파일러(바이트코드를 기계어로 바로 변환) 기술의 도입으로 상당히 개선

  • 스레드 ( 프로세스 내에서 실행되는 흐름 단위 )  / 프로세스 (메모리를 할당받아 실행중인 프로그램)
    생성방법 : Runnable(인터페이스)로 선언되어 있는 클래스 또는 Thread 클래스를 상속받아서 run() 메소드 구현
    장점 : 빠른 프로세스 생성, 메모리 적게 사용, 정보 공유가 쉬움
    단점 : 쓰레드로 한번에 많은 코드 수행할때 컴퓨터 부하, 데드락(다른 쓰레드에서 내가 필요한 자원을 가지고있어 무한 대기하는 상태)에 빠질 위험이 있음.
    스레드 사용이유 : 위 코드의 수행완료 여부 상관없이 계속 코드들을 수행하게 할 수 있다. (동시에 여러개 코드 수행)
    (출처:https://wikidocs.net/230)

 

 

 

 

'TIL' 카테고리의 다른 글

Git 브랜치 전략  (0) 2021.09.28
[TIL] JWT TOKEN, Cookie & Session  (0) 2021.09.26
[TIL] DP  (0) 2021.09.15
[TIL] DB 이상현상  (0) 2021.09.09
[TIL] 인덱스, 뷰  (0) 2021.09.09
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기