본문 바로가기
Computer/CS_Knowledge

[CS] Java

by HJ0216 2023. 7. 6.

Java

특징

  • 객체지향(캡슐화, 상속, 다형성 등) 언어
  • JVM(Jva Virtual Machine) 위에서 동작 → 운영체제로부터 독립적이나 실행속도가 느린 단점이 존재
  • 실행 절차: *.java 파일 생성 → compiler: *.java → *.class 파일인 Byte code로 Compile → JVM: Byte Code → 기계어인 Binary Code로 변환 → CPU에서 실행되어 사용자에게 제공

 

  • 다중 상속이나 타입이 엄격

 

JVM

  • 구성: Class Loader, Execution Engine, Runtime Data Area
  • Class Loader: 바이트 코드(*.class)들을 JVM의 메모리 영역인 Runtime Data Areas에 배치
  • Execution Engine: 클래스 로더를 통해 런타임 데이터 영역에 배치된 바이트 코드를 명령어 단위로 읽어서 실행
    • Garbage Collector: Heap 메모리 영역에서 사용하지 않는 메모리를 자동으로 회수
  • RunTime Data Area: JVM의 메모리 영역

 

객체지향프로그래밍(Object Oriented Programming)

  • 애플리케이션을 구성하는 요소들을 객체로 바라보고, 객체들을 유기적으로 연결하여 프로그래밍 하는 것
    • 프로그램을 보다 유연하고 변경에 용이하게 만들 수 있음 → 유지보수에 유리
    • 특징
      • 추상화(Abstraction)
      • 상속(Inheritance)
      • 다형성(Polymorphism)
      • 캡슐화(Encapsulation)

 

Abstraction

  • Abstract Class: 클래스 내 추상 메소드가 하나 이상 포함되거나 abstract로 정의된 경우
  • Interface: 모든 메소드가 추상 메소드로만 이루어져 있는 경우
    • 공통점:
      • new 연산자를 통한 객체 생성 불가능
      • 하위 클래스에서 확장/구현 해야 사용 가능
    • 차이점:
      • Interface를 구현할 경우, 해당 Interface 내의 모든 메서드를 구현해야 함
      • Abstract Class: 다중 상속 불가, Interface: 다중 구현 가능

 

Inheritance

  • 기존의 클래스를 재활용하여 새로운 클래스를 작성
    • Overriding: 상위 클래스에 있는 메소드를 하위 클래스에서 재정의하는 것
    • Overloading: 매개변수의 개수나 타입을 다르게 하여 같은 이름의 메소드를 여러 개 정의하는 것

 

Polymorphism

  • 상위 클래스 타입의 참조 변수로 그것과 관계있는 하위 클래스들을 참조할 수 있는 것
    * 이동 수단에 대해 인터페이스를 구현하여 객체간의 결합도를 낮춰 객체지향 프로그래밍을 실현

 

Encapsulation

  • 클래스 안에 서로 연관있는 속성과 기능들을 하나의 캡슐(capsule)로 만들어 데이터를 외부로부터 보호하는 것
    • 접근제어자
    • Getter/Setter: 속성값을 private으로 선언하여 외부의 직접적인 접근을 제어하고, getter/setter 메서드는 public으로 선언하여 선택적으로 외부 접근을 제어함 * 기존: Driver 클래스가 Car 클래스의 내부 메서드를 직접 호출함으로써, 객체간의 결합도가 높아짐(= Car 클래스의 변경이 Driver 클래스의 결함을 유발할 수 있음)
      * → 캡슐화: Car 클래스와 관련된 기능들은 온전히 Car 에서만 관리되도록 하였고, 불필요한 내부 동작의 노출을 최소화하여 객체지향 프로그래밍 실현

 

static

  • 인스턴스(객체) 생성 없이 바로 사용 가능
  • 자주 변하지 않는 값이나 공통으로 사용되는 값에 대해 매번 메모리에 로딩하거나 값을 읽어들이는 것보다 일종의 '전역변수'와 같은 개념을 통해 접근하는 것이 비용도 줄이고 효율을 높일 수 있음

 

Error & Exception

  • Error: 실행 중 일어날 수 있는 치명적 오류, UncheckedException의 일종
  • Exception: 경미한 오류, try-catch를 이용해 프로그램의 비정상 종료를 막을 수 있음
    • CheckedException: 실행하기 전에 예측 가능한 예외, 반드시 예외 처리
    • UncheckedException: 실행하고 난 후에 알 수 있는 예외, 따로 예외처리를 하지 않음(예: RuntimeException)

 

Collection Framework

  • 다수의 데이터를 쉽고 효과적으로 관리할 수 있는 표준화된 방법을 제공하는 클래스의 집합java_collection_framework
  1. List: 순서가 있는 데이터의 집합, 데이터 중복 허용
    • ArrayList, Vector, LinkedList, ...list_type
  2. Set: 순서가 없는 데이터의 집합, 데이터 중복 불허
    • HashSet, LinkedHashSet(순서 보장), TreeSet, ...
  3. Map: 키와 값이 한 쌍, 순서가 없는 데이터 집합, 키를 기준으로 중복 불허
    • HashMap, LinkedHashMap(순서 보장), TreeMap, HashTable, ...hash_map

직렬화(Serialize)

  • 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 시스템에서도 사용할 수 있도록 바이트(byte) 형태로 데이터 변환하는 기술(↔ 역직렬화)
  • SerialVersionUID
    • JVM: 직렬화와 역직렬화를 하는 시점의 클래스에 대한 버전 번호를 부여
    • 직렬화할 때의 버전 번호와 역직렬화를 할 때의 버전 번호가 다르면 역직렬화가 불가능하게 될 수 있기 때문에 이런 문제를 해결하기 위해 SerialVersionUID를 사용

 

 

 

참고 자료

 

☕ JVM 내부 구조 & 메모리 영역 💯 총정리

저번 포스팅에서는 JRE / JDK / JVM에 대해서 간략하게 알아보는 시간을 가졌다면, 이번 포스팅에서는 JVM의 내부 구조에 대해 좀 더 자세하게 알아보도록 할 예정이다. JVM(자바 가상 머신)은 자바 언

inpa.tistory.com

 

신입 개발자 기술면접 질문 정리 - 자바

💡 Java의 특징을 설명해주세요. Java는 객체지향 프로그래밍 언어입니다. 기본 자료형을 제외한 모든 요소들이 객체로 표현되고, 객체 지향 개념의 특징인 캡슐화, 상속, 다형성이 잘 적용된 언

dev-coco.tistory.com

 

객체 지향 프로그래밍의 4가지 특징ㅣ추상화, 상속, 다형성, 캡슐화 -

객체 지향 프로그래밍은 객체의 유기적인 협력과 결합으로 파악하고자 하는 컴퓨터 프로그래밍의 패러다임을 의미합니다. 객체 지향 프로그래밍의 기본적인 개념과 그 설계를 바르게 하기 위

www.codestates.com

 

'Computer > CS_Knowledge' 카테고리의 다른 글

[CS] Design Pattern  (0) 2023.08.04
[CS] Database  (0) 2023.07.28
[CS] Network  (0) 2023.07.12
[CS] Operating System  (0) 2023.07.12
[CS] Spring  (0) 2023.07.06