『자바의 신 3판』 을 읽고 내용 정리 및 공부한 내용을 정리한 글입니다.
서적: 자바의 신 3판 구입처
Application Programming Interface의 약자로 “애플리케이션에 선언되어 있는 클래스와 메소드에 대한 상세한 설명이 포함된 문서”를 말한다.
JDK에는 많은 클래스와 메소드들이 포함되어 있다. 이렇게 많은 클래스를 사용할 때 참조하는 문서가 바로 API라는 것이다.
자바의 API는 HTML로 구성되어 있다(웹이다). JDK에 포함되어 있는 문서도 API라고 부르며, 다른 여러 자바 관련 프레임웍에서 제공하는 문서도 API라고 부른다.
💡 이 책에서 설명하는 API 기준은 Java 7 이상 버전의 기준이다.
💡 API 문서 만들기
소스 내에 클래스 및 메소드를 선언하기 전이나 후에 API에 명시되도록 하기 위한 주석을 상세하게 달아두고, javac와 java 명령어가 있는 jdk/bin 디렉터리에 있는 javadoc라는 명령어를 실행만 해주면 자동으로 API 문서인 HTML 파일이 생성된다.
부록에서 확인할 수 있다.
Java API 문서가 최근에 많이 변경되었다. 가장 큰 변화는 3개의 화면으로 나뉜 Frame 버전을 사용할 수 없고, 다운로드하기가 매우 어렵게 되어있다. 그래서 온라인으로 API 문서를 활용해야만 한다.
API 문서는 크게 OpenJDK와 Oracle 문서로 나눠서 볼 수 있다.
OpenJDK 19 버전의 API를 확인하려면 구글에서 “openjdk 19 api doc”로 검색하면 다음의 링크가 나온다.
오라클 문서는 “openjdk 19 api doc”로 검색하면 다음의 링크가 나온다.
우측 상단의 검색 창에서 클래스를 찾아갈 수 있다.
이 상세 정보 화면에서 클래스 및 인터페이스는 다음의 순서로 정보가 제공된다.
“디프리케이티드”라고 읽으며, 이제 이건 사용하지 않는 것이라고 선언한 것이다. 이 Deprecated는 생성자, 상수 필드, 메소드에 선언되어 있다.
JDK를 처음 만들었을 때에는 필요에 의해 만들었는데, 나중에 쓰다 보니 문제를 야기시키거나 혼동을 가져와서, 혹은 더 이상 가치가 없을 때 Deprecated로 처리한다.
삭제하지 않고 Deprecated시키는 이유는 호환성 때문이다.
💡 호환성 Compatibility
버전이 올라갔을 때, 이전 버전에서 문제가 생기지 않도록 한다.
Deprecated된 메소드를 사용하면 Warning을 띄워준다.
Note: ~ uses or overrides a deprecated API.
-Xlint:deprecation이라는 옵션을 주고 컴파일하면 상세 경고를 볼 수 있다.
이렇게 컴파일 시 알려주는 이유는 사용자들이 그 클래스가 Deprecated되었다는 사실을 알 수가 없기 때문이다.
이클립스 등의 툴은 Deprecated 여부를 체크하여 보여주지만, 그냥 일반 에디터에서 자바 코드를 작성하는 사람들은 알 수가 없다. 따라서 이러한 Deprecated 된 것들을 알려준다.
책에서는 화면별 상세 설명을 해주는데, 이건 책을 직접 참고해서 보는 편이 좋을 것 같다.
BigDecimal (Java Platform SE 8 )
Me: 불변하는 임의의 정밀 부호가 있는 십진법 숫자. BigDecimal 클래스는 산술, 스케일 조작, 반올림, 비교, 해싱 및 포맷 변환을 위한 연산을 제공합니다.
Me: 16개
Me: BigDecimal의 절대값을 반환한다.
Me: subtract(BigDecimal subtrahend)
Me: divide 라는 이름으로 선언되어 있다. 그리고 scale을 따로 설정할 수도 있고.
💡 책에 있는 내용이 아닙니다.
책을 읽으며 설명이 더 필요하거나, 추가로 궁금한 점에 대해 질문 형식으로 작성 후, 답을 구해보고 있습니다.
참고한 사이트나 영상은 [출처]로 달아두었으며, 오류 지적은 언제나 환영합니다.
자바 API라는 문구가 낯설어서 정의를 찾아보고 정리해봤다. 지금까지 API라면 웹 API를 떠올렸는데, 찾아보니 좀 더 넓은 의미로 사용되는 단어였다.
Application Programming Interface의 약자로, 위키백과에서는 다음과 같이 정의하고 있다.
컴퓨터나 컴퓨터 프로그램 사이의 연결이다. 일종의 소프트웨어 인터페이스이며 다른 종류의 소프트웨어에 서비스를 제공한다.
사용자 인터페이스가 컴퓨터와 사람을 연결시킨다면, API는 컴퓨터나 소프트웨어를 서로 연결시킨다.
즉, 응용 프로그램 간에 상호작용하기 위한 규약이다. 특히 외부 응용 프로그램에서 서비스를 요청하고 데이터를 교환하는데 사용된다.
API의 종류는 크게 다음과 같이 나눌 수 있다.
API는 다른 소프트웨어와 상호작용하기 위한 규칙의 집합이며, 라이브러리는 구현된 코드의 모음이다.
위키백과에서 자바 API는 다음과 같이 정의된다.
자바를 사용하여 쉽게 구현할 수 있도록 한 클래스 라이브러리의 집합이다.
java에서 제공하는 java.lang 혹은 java.util 등과 같은 클래스들은 오라클 Java가 제공해주는 라이브러리라고 볼 수 있다.
API는 라이브러리를 포함하는 개념이다. 라이브러리는 특정 작업을 수행하는 함수, 클래스, 모듈 등으로 구성되어 있고 이 구성 요소들은 API를 통해 노출된다.
위에서 말한 java.util
패키지는 유용한 자료구조와 알고리즘을 제공하는 라이브러리로, 개발자가 클래스와 메소드들을 사용할 수 있도록 API를 통해 노출된다.
정리하자면, 외부에서 사용할 수 있도록 인터페이스를 정의하는 것을 API라고 하는 것 같다. 이때, API를 통해 제공되는 것이 라이브러리일 수도 있는 것이다.
float와 double은 IEEE 754 표준의 부동소수점 방식을 사용한다. 부동 소수점 방식은 다음과 같은 구조를 가지고 있다.
32비트 이진 부동소수점에서는 이다.
IEEE 754 표준의 부동 소수점 수학적 수식은 다음과 같다.
부동소수점을 계산하는 방법은 이 사이트 에서 상세히 설명해준다.
부동소수점 방식으로 실수를 표현하면 큰 범위의 값을 표현할 수 있다. 하지만, 정밀한 십진수를 표현하려고 할 때 발생하는 한계와 부동소수점 정밀도 문제가 있다.
따라서 금융권과 같은 정확한 십진수 계산이 필요한 경우에는 BigDecimal을 사용한다.
BigDecimal은 소수를 십진수로 다루머 가변 소수점 연산을 수행한다. 또한 가변 크기의 정수를 표현하는 데 필요한 메모리를 동적으로 할당한다. 즉, 사용되는 값의 크기에 따라 메모리의 크기가 달라진다.
내부적으로 정수 부분과 소수 부분으로 값을 표현한다.
소수부 표현이 정확하다고 BigDecimal foo = new BigDecimal(0.1);
을 넣어버리면 생성자 내부에 자바가 0.1을 근사한 값을 넣어버려 실제로는 0.1과는 완전히 다른 값인 0.1000000000000000055511151231257827021181583404541015625을 저장해버린다.
따라서 BigDecimal을 사용해 소수연산을 할 때는 반드시 String으로 변환하여 근사할 여지가 없게끔 처리해야 한다.
precision은 유효숫자 개수를 의미하며 scale은 소수 자리의 개수를 의미한다. 즉, 예를 들어 12.345는 precision이 5이고 scale이 3이 된다.
ChatGPT