전체 글 107

[공부/Java] static이란?

일반적으로 우리가 만드는 class는 static 영역에 생성된다. static 키워드로 만든 정적 변수와 정적 메소드의 경우는 프로그램이 종료되기 전까지 사용이 가능하다. 또한 static이라는 키워드를 통해 static 영역에 할당된 메모리는 모든 객체가 공유하는 메모리라는 장점을 지니지만 GC(Garbage Collector)의 관리 영역 밖에 존재해 static을 자주 사용하면 프로그램 종료시까지 메모리가 할당된 채로 존재해 시스템 퍼포먼스에 악영향을 주게 된다. Static이 저장되는 위치 Permanent vs. Metaspace Permanent JDK 8 이전까지 존재했던 메소드 영역 클래스 내부의 메타 데이터들을 저장하는 영역 Heap영역에 속하며 클래스, 메소드 메타 데이터, 정적 객체..

공부/Java 2022.12.28

[도서/자바의 신] 부록 #5 java.lang.Math 클래스

✔️이 글은 [자바의 신 - 이상민 지음] 도서를 바탕으로 정리한 글입니다. 수학적인 계산을 위해서 꼭 필요한 Math 클래스 자바에서는 수학을 계산하는 Math라는 클래스를 제공한다. JDK 1.0에서부터는 Math를, JDK 1.3에서부터는 StrictMath클래스도 함께 제공한다. StrictMath는 어떤 OS나 어떤 시스템 아키텍처에서 수행되든지 동일한 값을 리턴해야 한다는 기준에 의해 만들어진 클래스고 Math는 시스템에 따라 결과가 달라질 수 있는 클래스이다. 하지만 대부분의 Math 클래스 내부는 StrictMath의 메소드를 호출하도록 되어 있고, StrictMath 클래스에 선언된 대부분의 메소드는 native로 선언되어 있다. Math 클래스에 선언되어 있는 상수에는 double타입인..

카테고리 없음 2022.12.27

[도서/자바의 신] 부록 #4 비트 연산자는 어떤 것일까

✔️이 글은 [자바의 신 - 이상민 지음] 도서를 바탕으로 정리한 글입니다. bit와 byte에 대해 다시 한번 살펴보자 컴퓨터는 기본적으로 0과 1로 처리된다. 0과 1을 나타내는 것을 1bit라 하고 8개가 모여 1byte가 된다. 1byte로는 2x2x2x2x2x2x2x2가지의 표현이 가능해 총 256가지가 된다. 8비트를 4자리씩 끊으면 4비트 2개로 16진수 2개로 1바이트를 표현할 수 있다. 비트 연산자라는 것들은 뭘까? CPU의 성능이 아주 느린 장비에 들어가는 프로그램을 작성하건, 암호화 작업과 관련된 작업을 할 때 아주 조금이라도 메모리를 줄이고 성능을 개선하기 위해서 비트 연산이 필요한 경우가 있다. 두 개의 숫자를 비교하는 비트 연산자들 & : AND 연산 | : OR 연산 (incl..

카테고리 없음 2022.12.27

[도서/자바의 신] 부록 #3 float와 double

✔️이 글은 [자바의 신 - 이상민 지음] 도서를 바탕으로 정리한 글입니다. 부록 1,2는 JDK 설치와 이클립스 설치에 관한 내용으로 따로 포스팅하지 않는다. float는 32비트 단일 정확도, double은 64비트 이중 정확도를 갖는 숫자이다. IEEE 754에서 정의한 소수점 숫자의 표준에는 비트 크기 외에도 다음과 같은 표준이 있다. 양수와 음수 +0과 -0 양수와 음수의 무한대(infinity) 숫자가 아닌 값 (Not a Number, NaN) NaN에는 0을 0으로 나누었을 때의 값이 포함되고 Float와 Double에 각각 Float.NaN, Double.NaN으로 선언되어 있다. s * m * 2^(e-N+1) s는 부호를 나타내고, m은 1보다 크거나 같고, 2^N보다 작은 정수, e..

[도서/자바의 신] #17 어노테이션이라는 것도 알아야 한다

✔️이 글은 [자바의 신 - 이상민 지음] 도서를 바탕으로 정리한 글입니다. 어노테이션이란? 어노테이션(Annotation)은 클래스나 메소드, 변수 등의 선언시에 @를 사용하는 것으로 컴파일러에게 정보를 알려주거나 컴파일할 때와 설치(deployment)시의 작업을 지정하거나 실행할 때 별도의 처리가 필요할 때 사용한다. 프로그램에 영향이 있는 어노테이션도 있고 없는 것도 있다. 미리 정해져 있는 어노테이션들은 딱 3개뿐 사용하기 위해 정해진 어노테이션은 3개가 있다. @Override : 해당 메소드가 부모 클래스에 있는 메소드를 Override했다는 것을 명시적으로 선언해줌 @Deprecated : 클래스나 메소드가 더이상 사용되지 않는 경우에 써줌. deprecated된 메소드를 써도 경고만 주고..

[도서/자바의 신] #16 클래스 안에 클래스가 들어갈 수도 있구나

✔️이 글은 [자바의 신 - 이상민 지음] 도서를 바탕으로 정리한 글입니다. 클래스 안의 클래스 코드를 간단하게 하기 위해 클래스 안에 클래스가 들어가 있는 클래스를 Nested 클래스라고 한다. Nested 클래스는 자바 기반의 UI 처리를 할때 사용자의 입력이나 , 외부의 이벤트에 대한 처리를 하는 곳에서 가장 많이 사용된다. Nested 클래스는 선언 방법에 따라 두가지로 나뉜다. Static nested 클래스 : static이 붙은 nested 클래스 내부(inner) 클래스 : static이 안붙은 nested 클래스 로컬 내부 클래스(local inner class) : 이름이 있는 내부 클래스 익명 내부 클래스(anonymous inner class) : 이름이 없는 내부 클래스 간단하게 ..

[도서/자바의 신] #15 String

✔️이 글은 [자바의 신 - 이상민 지음] 도서를 바탕으로 정리한 글입니다. 자바에서 가장 많이 사용하는 String 클래스 객체에 더하기를 하면 toString() 메소드가 호출되고 그 결과가 더해지는 것이라 결론적으로는 String을 더하는 것이다. 자바에서 많이 쓰이는 String 클래스에 대해 알아보자. public final class String extends Object implements Serializable, Comparable, CharSequence public final로 선언되어 있어 누구나 사용할 수 있지만 확장할 수 없는 클래스이다. implements 뒤에 오는 인터페이스들을 구현해 놓은 것이 String 클래스이다. Serializable 인터페이스는 구현해야 하는 메소드..

[도서/자바의 신] #14 다 배운 것 같지만, 예외라는 중요한 것이 있어요

✔️이 글은 [자바의 신 - 이상민 지음] 도서를 바탕으로 정리한 글입니다. 자바에서 매우 중요한 예외 자바에서의 예외는 "우리가 예상한, 혹은 예상치도 못한 일이 발생하는 것을 미리 예견하고 안전장치를 하는 것"을 말한다. 예외적인 일이 발생하면 "예외"라는 것을 던진다. 대표적인 예로 null인 객체에 메소드를 호출하는 경우가 있다. try-catch는 짝이다 컴파일은 정상적으로 되지만 예상치못한 예외가 발생할 수 있다. 그러한 예외 상황이 발생할만한 코드들을 try로 묶어주고, catch로 예외처리를 해준다. try-catch 블록 try { 예외가 발생할만한 코드 } catch (Exception e) { 예외가 발생했을 때 수행할 코드 } catch 뒤에 오는 소괄호에는 Exception이라는 ..

[공부/Java] JVM, JRE, JDK

자바 가상 머신 (JVM, Java Virtual Machine) 각기 다른 플랫폼에 설치해 동일한 자바 실행 환경을 만들어주는 소프트웨어 Java는 JVM 덕분에 플랫폼에 종속적이지 않지만, JVM 자체는 플랫폼에 종속적이라 운영체제에 맞는 JVM을 설치해줘야 함 응용 프로그램을 구성하는 클래스 파일(.class)의 바이트 코드를 JVM 환경에서 실행 JVM은 자바 실행 환경인 JRE에 포함되어 있어 현재 사용하는 컴퓨터 운영체제에 맞는 자바 JRE가 설치되어 있다면 자바 가상 머신이 설치되어 있다는 의미 JVM을 사용함으로써 하나의 바이트 코드(.class)로 모든 플랫폼에서 동작할 수 있다는 것이 가장 큰 장점이다! JVM 동작 방식 1. 자바로 개발된 프로그램을 실행하면 JVM은 OS로부터 메모리..

공부/Java 2022.12.24

[공부/Java] JVM 구성 - Class Loader, Execution Engine, Garbage Collector

JVM의 구성요소 Class Loader Class Loader는 바이트코드(.class)를 읽어들여서 클래스 객체를 생성하는 역할을 담당한다. class 로딩은 Run-Time에 일어난다. 개발자가 new라는 예약어로 객체를 생성하는 코드를 처음 실행할 때 JVM은 만들 클래스를 Class Loader로 .class 파일을 최초로 메모리에 load한다. 최종적으로 Runtime Data Area의 Method Aread에 배치된다. Class Loader의 기술적 특징 Hierarchical : Class Loader 간에 계층형 구조를 가짐. 'bootstrap' Class Loader가 가장 최상위 Delegate load reqeust : 계층형 구조를 가지고 있어 어느 시점에 Class 로딩요청..

공부/Java 2022.12.24
728x90