Backend 취업준비(37)
-
Java 여러 쟁점 정리
객체 vs 인스턴스 객체 : 다른 물체와 구분되는 특성을 조합한 프로그래밍 적으로 설계의 대상을 지칭한다. 혹은 실제로 구현한 인스턴스를 모두 아우르는 포괄적인 단어 (ex 자동차) 인스턴스 : 클래스(ex 자동차 설계도)를 바탕으로 new예약어와 함께 생성되어, Heap영역에 메모리를 차지하여 존재하는 것 (ex 아반떼) Heap vs method area method area : JVM이 클래스를 로딩할 때 생성되는 영역으로써, 모든 쓰레드에 공유되는 영역 => 변하지 않는 정보들이 위치할 시 메모리 적으로 이득이 될 것이다. 따라서 정적 필드, 메서드, 정적 메서드, 상수 등 메타 데이터가 위치한다. 필드가 method area에 위치하지 않는 이유 : 생성하는 인스턴스마다 다른값을 생성자를 통해 ..
2024.01.30 -
NaN과 Infinity 연산, null 출력
정수 타입을 0으로 연산 할 경우 5 / 0 => ArithmeticException 예외 발생 5 % 0 => ArithmeticException 예외 발생 정수 타입을 0.0 또는 0.0f으로 연산 할 경우 5 / 0.0 => Infinity 5 % 0.0 => NaN 연산의 결과가 Infinity 혹은 NaN인지 확인하려면 Double.isInfinite() 와 Double.inNan() 메소드를 사용하면 된다. 자바에서는 Infinity와 NaN이 Double클래스에 정의 되어 있으며, 연산 또한 가능하지만 유의미한 결과를 얻을 수는 없다. 결과 NaN -Infinity Infinity toString() 과 valueOf()의 null처리 Object nullValue = null; String..
2024.01.30 -
자바의 String 클래스, 문자열 다루기
자바의 문자열은 java.lang 패키지의 String 클래스의 인스턴스로 관리된다. 소스상에서 문자열 리터럴은 String 객체로 자동 생성되지만, String 클래스의 다양한 생성자를 이용해서 직접 String 객체를 생성할 수도 있다. String 클래스는 데이터(문자 배열, char[])와 메서드(문자열 관련)로 이루어져 있다. 내용을 변경할 수 없는 불변 클래스 이다 String a = "a"; String b = "b"; a = a + b; 새로운 문자열 "ab"가 생성되고 이를 참조하는 주소값이 a에 저장된다(기존 a에 저장되어 있던 주솟값이 변경됨) 덧셈 연산자를 이용한 문자열 결합은 성능이 떨어진다. 문자열의 결합이나 변경이 잦다면, 내용 변경이 가능한 StringBuffer, Strin..
2024.01.29 -
왜 public static void main 인가?
프로그램이 동작하도록 하려면 JRE가 프로그램의 main메서드를 실행시켜야 하는데, 이 과정이 잘 수행되도록 하기 위하여 정해짐 public : main 메서드가 클래스 바깥에서 호출 가능해야 하는데, 다른 접근제어자를 붙이게 된다면 JRE에서 접근할 수 없게 된다. 예시로 private이라면 main메서드가 존재하는 클래스 에서만 호출 가능하게 된다. static : main 메서드가 존재하는 클래스를 인스턴스화 하지 않고도 main 메서드를 실행할 수 있게 한다. => JVM 구동 시작 시에 생성이 되며, 종료 시까지 유지되는 Method Area에 로드 되도록 한다. void : main메서드의 임무는 프로그램 실행을 하는 것이며, 해당 메서드가 종료되면 프로그램이 종료된다. 특정 값을 반환하는 역..
2024.01.28 -
JVM 전반에 관하여, 메모리 관리와 GC
자바 SE(Standard Edition) 의 구현체는 JDK(자바 개발 키트)와 JRE(자바 실행 환경)로 구성된다 JDK => 프로그램 개발에 필요한 JVM + 라이브러리API + 개발도구(java.exe, javac.exe) , JDK를 설치하면 JRE도 자동 설치된다. *.java => (javac.exe) => *.class => (java.exe) => 기계어 => 실행 JRE => 프로그램 실행에 필요한 JVM + 라이브러리API 자바 프로그램을 개발하고자 하는 것이 아닌 이미 개발된 프로그램을 실행만 하려면 설치 JVM 운영체제, 다른 애플리케이션은 컴퓨터의 메모리 위에서 돌아간다. Java프로그램을 실행하면 실행을 위한 메모리를 할당받아 Runtime Data Area 구성. 자바 소스코..
2024.01.28 -
자바스크립트 객체 지향에 관한 고찰
클래스 기반 객체 지향 프로그래밍 ⇒ 자바, 파이썬, C++ 클래스 기반 언어에서 클래스란 객체의 상태와 기능을 정의한 설계도이다. 클래스의 인스턴스화로 생성된 객체를 인스턴스라고 한다. 여기서 인스턴스는 클래스에서 정의된 모든 특성에 대한 복사본(copy)이기 때문에 두 개념은 개별적이며 서로 간의 참조는 존재하지 않는다. 프로토타입 기반 객체 지향 프로그래밍 ⇒ 자바스크립트 프로토타입 기반 언어에서는 클래스 - 인스턴스의 개념이 아닌 오직 객체 개념만 존재한다. 다시 말하지만, ES6에 도입된 클래스 문법은 실제 클래스 패턴에 대한 모방일 뿐이다. 클래스 - 인스턴스의 개념이 아닌 오직 객체 개념만 존재한다는게 무슨 말이지? 자바에서는 Class설계도만을 작성한다 해도 Heap영역 메모리 공간을 할당..
2024.01.18