본문 바로가기
BACK-END/Java

[Java] API 기초와 java.lang

by 로햐 2021. 11. 22.

Ⅰ. API 개요

1. API란?

Application Programming Interface.

사용자가 내부의 로직을 모르더라도 해당 기능을 사용하는데 아무런 문제가 없도록 구현된, 메뉴판을 말한다.

 

자바에서 API는 중복을 피하고 매번 어려운 로직을 매번 기술할 필요 없이, 미리 기록된 객체를 불러 사용할 수 있도록 응용하는 방법이다. 이는 여러 개발자간의 소통을 손쉽게하고 일관성있는 문서를 작성할 수 있도록 도우며, 효율적인 자원 사용을 돕는다.

 

웹 API ▼

https://www.oracle.com/technical-resources/articles/middleware/carrasco-web-apis.html

 

오라클에서 제공하는 자바 API 문서▼

https://docs.oracle.com/javase/8/docs/api/

 

Java Platform SE 8

 

docs.oracle.com

1-2. API를 구축하는 방법▼

https://apiary.io/how-to-build-api

 

How to Build an API | Apiary

What is the thing you’re describing? Is it a chair or a bench? At first sight, it may feel obvious or even trivial to define the semantics of your application domain. However, make sure you list all the terms used in your application and get everybody on

apiary.io


Ⅱ. java.lang.* 패키지

java.lang.*는 보이지 않아도 모두 import했다고 간주하므로, 기술하지 않아도 패키지의 모든 내용은 import되어있다.

2-1. java.lang.Object

Object 클래스는 모든 클래스가 상속받은 상태이다. 최초의 클래스.

메소드 의미 반환형
.hashCode() 16진수인 주소값을 10진수로 변환 int
.equals(o) 참조한 객체와 인자로 넣은 객체가 동일한가 boolean
.toString()  필드를 한번에 모아 볼 수 있도록 String

//.finalize()

// .wait() / .notify() / .notifyAll() : IDE의 자동완성에서나 가끔 보인다고함

 

IDE란? Integrated Development Environment. 통합 개발 환경.

개발을 하나의 프로그램에서 손쉽게 할 수 있도록 돕는 프로그램이다. 이클립스, VSCode, JDE, X Code 등이 있다.


2-2. java.lang.Math

자주 쓰이는 수학 관련 요소들을 모아놓은 API.

모든 요소가 static으로 정적 바인딩 되어있어 변경할 수 없다.

객체를 생성하지 않으므로 생성자가 private이다.

 

  • PI : 파이
메소드 의미 매개변수 반환형
Math.round(dNum) 반올림 double double
Math.ceil(dNum) 올림 double double
Math.floor(dNum) 버림 double double
Math.abs(num) 절댓값 int/double/long/float int/double/long/float
Math.max(num1, num2) 최댓값 int/double/long/float int/double/long/float
Math.min(num1, num2) 최솟값 int/double/long/float int/double/long/float
Math.pow(dNum1, dNum2) a의 b제곱 double double
Math.sqrt(dNum) a의 제곱근 double double
Math.random() 0이상 1미만의 무작위 수 - double

 

2-3. String

String은 불변 객체로 설계되어있다. 주소값이 문자열과 연관되어있다.

1. String Pool

보안

동기화

hashCode

String을 선언하는데 사용하는 방법

1. new 할당

2. 바로 할당

String strNew = new String("Hello World");

String strPool = "Hello World";

 

2-2-1. String Pool

String은 new로 선언하지 않고 바로 할당해서 사용한다.

문자열은 String Constant Pool에 저장되어 재사용할때 메모리 낭비를 줄이지만,

new로 String 객체를 선언하는 경우 String Pool 외부의 Heap 메모리에 새로운 객체로 생성하게된다.

String 객체의 주소값은 문자열의 내용을 따라 정해진다. 

 

2-2-2. String 클래스의 메소드

메소드 의미 매개변수 반환형
.charAt(iNum) index의 문자 하나 반환 int char
.concat(str) 문자열에 a를 합치기 String String
.length() 문자열의 길이 - int
.substring(iNum1, iNum2) a이상 b미만까지 문자열 int, int String
.replace(ch1, ch2) a를 b로 전부 교체 char, char String
.trim() 시작과 끝의 공백 제거 - String
.toUpperCase() 대문자로 변경 - String
.toLowerCase() 소문자로 변경 - String
.toCharArray() 문자 하나씩 배열에 넣기 - char[]
String.valueOf(cArr) cArr의 문자를 하나의 String char[] String
.split(str) str가 나올때마다 나누기 String String[]
.indexOf(str) 문자열의 시작위치를 찾기 String int

2-4. java.lang.StringBuffer / StringBuilder

String의 +연산자/.concat()은 매번 새로운 값을 할당하여 연산

StringBuffer와 StringBuilder는 buffer에 담아두었다가 한번에 처리하므로 긴 문자열을 처리할 때 속도가 더 빠르다.

StringBuffer은 Thread Safe(동시제어)를 가지고 있는데, StringBuilder는 그 기능을 빼고 속도를 향상시킨 버전.

 

메소드 의미 매개변수 반환값
.appand(str) 뒤에 붙여 하나로 합치기 String String
.insert(iNum, str) 특정 인덱스부터 값을 삽입 int, String
.delete(iNum1, iNum2) iNum1부터 iNum2 전까지 삭제 int, int
.indexOf(str) 값이 어느 인덱스 String int
.substring(iNum1, iNum2) iNum1부터 iNum2 전까지 추출 int, int
.length() 길이 - String
.reverse() 역순 -
.replace(iNum1, iNum2, str) iNum1부터 iNum2전까지 str로 변경 int, int, String

2-5. System

인스턴스화할 수 없다. 입력, 출력, 오류출력(err)을 하는 Stream이 존재.

체인 의미
in InputStream 
out PrintStream 
gc() 가비지 컬렉터 실행

2-6. Wrapper

기본 자료형을 객체처럼 활용할 수 있도록 포장하는 방법. 

 

장점

  1. Object의 메소드를 활용할 수 있음
  2. 메소드의 매개변수로 객체타입을 요구할 때 사용 가능
  3. 다형성을 적용하여 하나의 자료 타입으로 관리하고자 할 때
  4. 각 Wrapper Class에서 제공하는 요소들 활용 가능

 

Wrapper Class 종류

기본 자료형 Wrapper Class
boolean Boolean
char Character
byte Byte
short Short
int Integer
long Long
float Float
double Double
- String

2-6-1. autoBoxing : 기본자료형 -> Wrapper Class 

Wrapper Class를 기본자료형 값으로 할당한다.

int iNum = 1;
Integer iI = iNum;//Integer iI = 1;도 가능

 

2-6-2. unBoxing : Wrapper Class -> 기본자료형

기본자료형을 Wrapper Class로 할당한다.

Integer i = new Integer(1);
int iI=i;

 

 

2-6-3. parse : String -> 기본 자료형

WrapperClass.parse기본자료형(String)

byte bNum = Byte.parseByte("1")

 

2-6-4. valueOf : 기본자료형 -> String

String.valueOf(기본타입값)

객체화하여 .toString()으로 내부값을 반환할 수도 있다.

 

String strChange = String.valueOf(1);//매개변수로 들어간 String으로 변환된다.
String bStr = Byte.valueOf((byte)1).toString();

 

2-6-5. 숫자와 관련된 Wrapper Class는 모두 Number 클래스의 자식클래스.

Number은 추상클래스.

Byte, Short Integer Double 모두 Number을 상속받고 Comparable<해당자료형>

Comparable 인터페이스는 compareTo()를 추상메소드로 가지고있다.

 

num1.compareTo(num2);

  • str1이 str2보다 크면 1 반환
  • str1이 str2와 같으면 0 반환
  • str1이 str2보다 작으면 -1 반환

Ⅲ. java.util.* 패키지

3-1. StringTokenizer

구분자로 String을 분리하는 방법.

StringTokenizer stn = new StringTokenizer(str, " ");
메소드 의미 반환형
.countTokens() 토큰의 수 int
.nextToken() 토큰을 하나 뽑아낸다 String
.hasMoreTokens() 남은 토큰이 있는가 boolean

API는 모르는 내용이 많아 이클립스에서 링크 타고 들어가서 읽거나 oracle 문서를 참고했다.

util 문서를 열어보고 익숙한 내용 많아지면 옮겨서 한번에 정리할 예정.

새로 알게되는 내용은 계속 추가!

'BACK-END > Java' 카테고리의 다른 글

[JAVA] API-JDBC  (1) 2021.12.07
[Java] API-Stream(Input & Output)  (0) 2021.11.25
[Java] API-Collection과 Map  (0) 2021.11.23
[Java] 객체지향의 활용  (0) 2021.11.21
[Java] Java의 기초 사용  (0) 2021.11.20