개발 언어들 정리/JAVA 4

[JAVA] JVM 구조

클래스 로더 시스템 .class 에서 바이트코드를 읽고 메모리에 저장 로딩: 클래스 읽어오는 과정 링크: 레퍼런스를 연결하는 과정 초기화: static 값들 초기화 및 변수에 할당 메모리 메소드 영역에는 클래스 수준의 정보 (클래스 이름, 부모 클래스 이름, 메소드, 변수) 저장. 공유 자원이다. 힙 영역에는 객체를 저장. 공유 자원이다. 스택 영역에는 쓰레드 마다 런타임 스택을 만들고, 그 안에 메소드 호출을 스택 프레임이라 부르는 블럭으로 쌓는다. 쓰레드 종료하면 런타임 스택도 사라진다. PC(Program Counter) 레지스터: 쓰레드 마다 쓰레드 내 현재 실행할 instruction의 위치를 가리키는 포인터가 생성된다. 네이티브 메소드 스택 -> c, c++등 의 다른 언어로 작성된 라이브러리..

[JAVA] JVM, JDK, JRE

JVM (Java Virtual Machine) 자바 가상 머신으로 자바 바이트 코드(.class 파일)를 OS에 특화된 코드로 변환(인터프리터와 JIT 컴파일러)하여 실행한다. -> 자바는 컴파일 방식과 인터프리터 방식을 모두 사용한다.-> 캐싱하는것 처럼 중복된 바이트 코드들은 저장소에서 불러다 사용한다.-> 자바는 바이트 코드로 컴파일을 하고 생성된 바이트 코드를 인터프리터 한다. 바이트 코드를 실행하는 표준(JVM 자체는 표준)이자 구현체(특정 밴더가 구현한 JVM)다. JVM 밴더: 오라클, 아마존, Azul, ... 특정 플랫폼에 종속적. JRE (Java Runtime Environment): JVM + 라이브러리 자바 애플리케이션을 실행할 수 있도록 구성된 배포판. JVM과 핵심 라이브러리..

[java]객체지향 SOLID란

클린코드로 유명한 로버트 마틴의 좋은 객체 지향 설계의 5가지 원칙을 정리한것이다. SRP: 단일 책임 원칙 (single responsibility principle) 하나의 클래스는 하나의 책임만 가져야한다. 중요한 기준은 변경이다. 변경이 있을 때 파급효과가 적으면 단일 책임 원칙을 잘 따른 것 ex) ui 변경, 객체의 생성과 사용을 분리 OCP: 개방 폐쇄 원칙 (open/closed principle) 확장에는 열려있으나 변경에는 닫혀있어야 한다. by 다형성 -> 기존 코드의 변경없이 확장이 가능해야한다. 역할과 구현을 분리한다. ex) 인터페이스를 만들고 구현체를 교환 or 확장한다. -> 그러나 순수 자바만으로는 실 구현체를 선택 하는 부분을 직접 변경해줘야한다. 이것은 개방 폐쇄 원칙을..

[java] Enum 이란

Enum class란 자바에서 바뀌지 않는 상수, 파이(pi)등을 선언 할 때 final double PI = 3.141592; 위와 같은 식으로 선언하곤 한다. 하지만 모든 고정된 상수들이 1대1로 매칭되는 것은 아니다 성별 - 남,여 ,기타 처럼 하나의 값을 표현 하는 2개 이상의 유한한 상태들이 존재할수 있고 이 때 이를 위의 final변수를 사용해 선언할경우 여러가지 불편함이 있을 수 있다. 그래서 java1.5부터는 enum 자료형을 지원하기 시작했는데 사용법은 아래와 같다. public enum Gender { // 열거형으로 선언된 순서에 따라 0부터 인덱스 값을 가진다. 순차적 증가 FEMALE, MALE, ETC // 상수들은 대문자로 선언해야한다. // 마지막에 ;를 찍지 않는다. ->..