JAVA API란?
(Application Programming Interface)
API뜻은 라이브러리라고 부르며 프로그램 개발에 자주 사용되는 클래스 및 인터페이스의 모음입니다. 더 간단히 말해 자바 프로그램 안에 미리 만들어져있는 있는 유용한 기능들입니다.
java.lang 패키지에 있는 클래스와 인터페이스는 import 구문 없이 사용할 수 있습니다.
jdk11 documents - java.lang
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/package-summary.html
아래의 메서드들을 외울 필요는 없습니다. 내용이 방대해서 어차피 다 까먹기 때문에 외우려고 하기 보다 메서드 보는 방법을 익히는게 좋습니다.
API 메서드 확인하는 방법
참조변수에 .을 찍어보면 사용할 수 있는 메서드가 나옵니다.



영어로 내용이 뜨는데 해석을 못하겠으면 구글 번역기에 검색해보거나,
메서드를 구글링하여 내용을 확인합니다!

CharSequence는 인터페이스이기에 문자열이 들어갈 수 있습니다.
- override, implement 해야될 메서드, 인터페이스 보기


- toString() 메서드도 자동 오버라이드 할 수 있습니다!


아래에 사용빈도가 높은 메서드들을 적어놓았지만,
그 중에서도 더욱 사용빈도가 높은 메서드 이름 앞에 ^표시 넣어놨습니다.
Object 클래스
^toString() : 멤버변수가 어떤 값을 갖고 있는지 문자열로 반환 오버라이딩 후 사용
^equals() : 객체 같은지 비교
clone()
public class Person /*생략extends Object*/ implements Cloneable{
private String name;
Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//오버라이딩 - toString (이게 제일 많이 사용됨)
//generate toString
@Override
//오버라이딩 하지 않으면 객체 주소만 나옴
public String toString() { //객체가 갖고있는 멤버변수가 뭘 갖고 있는지(값)문자열로 반환
return "Person [name=" + name + "]";
}
//멤버변수명이 같으면 true반환
//더 유용한 정보를 반환하도록 오버라이드 내용 변경
@Override
public boolean equals(Object obj) {
if(obj instanceof Person) {
Person p = (Person)obj;
String n = p.getName(); //person이 갖고있는 이름 나옴
if(n.equals(this.name)) {
System.out.println("이름이 같음");
return true;
}
}
return false;
}
//clone메서드를 사용하고 싶다면 override
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
public static void main(String[] args) {
Person p = new Person("홍길동");
//오버라이딩 후 멤버변수의 값을 확인하느라 사용
//못알아듣겠으면 번역기 사용
//toString()
System.out.println(p.toString());//반환ok //Person [name=홍길동]
System.out.println(p);//Person [name=홍길동]
//equals()
Person p2 = new Person("홍길동");
System.out.println(p.equals(p2)); //f
//객체 주소가 다르기때문에 false
//clone() - 객체 복사
try {
Object obj = p.clone(); //이름까지 동일하게 복사 (주소는 다르지만)
Person p3 = (Person)obj;
System.out.println("복사된 객체의 name :" + p3.getName());
System.out.println(p3 == p); //false
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
System 클래스
System 클래스가 제공하는 메서드는 모두 static 메서드이므로 System 클래스 이름으로 바로 사용이 가능합니다.
exit() : 시스템 종료
gc() : 가비지 컬렉터 실행
currentTimeMillis() : 1970.1.1 이후의 현재까지의 나온 시간을 밀리초
System.out.println();
//System.exit(0);
//System.gc();
long start = System.currentTimeMillis();
//System.out.println(start);
//1970/1/1이후의 현재까지의 나온 시간을 밀리초로
long sum = 0;
for(int i = 1; i <= 10000000000L; i++) {
sum+=i;
}
long end = System.currentTimeMillis();
//System.out.println(end);
System.out.println((end - start)* 0.001 +"초 소요됨");
String 클래스
^charAt() : 특정 인덱스의 글자를 리턴
indexOf() : 특정 문자열의 시작 인덱스 값을 반환합니다. 만약 주어진 문자열이 포함되어 있지 않으면 -1 을 리턴합니다.
^replace( , ) : 특정 문자열을 변경합니다.
^substring() : 인덱스를 기준으로 그 앞의 문자열을 잘라줍니다. 만약 매개값으로 인덱스를 2개 주면 처음 매개값 이상 두 번째 매개값 미만의 문자열을 제외하고 나머지를 삭제합니다.
trim() : 문자열의 앞, 뒤 공백을 제거합니다.
split() : 특정 문자열 기준으로 잘라서 배열에 리턴.
contains() : 해당 문자열 포함여부
copyValueOf()
valueOf()
String s = "홍길동";
//char a = s.charAt(0);
//System.out.println(a);
//indexOf("문자열");
//길 문자를 찾으면 위치반환, 못찾으면 -1 반환
int index = s.indexOf("길");
System.out.println("길 시작위치:" + index);
//replace - 원본 문자는 안바뀜
//s = s.replace("길",""); -> 원본문자 바꾸기
String result = s.replace("길","");
System.out.println("결과:" + result);
System.out.println("원본문자열:" + s);
//substring
String s2 = "오늘은 날씨가 추워요";
String result2 = s2.substring(4);
System.out.println(result2); //4미만 절삭
String result3 = s2.substring(4, 7);
System.out.println(result3); //4이상 7미만 추출
//trim - 앞뒤 공백 제거
System.out.println(" 홍길동 ".trim());
//split - 문자열 자르기
System.out.println("-----------------------");
String[] result4 = s2.split(" ");
System.out.println(Arrays.toString(result4));
//매개변수 2개 주면 배열의 크기 제한
String[] result5 = "010-1234-5678".split("-", 2);
System.out.println(Arrays.toString(result5));
//문자열 포함여부
if(s.contains("홍")) {
System.out.println("홍 이 포함됨");
}
//배열의 3번째 선언방법
String result6 = String.copyValueOf(new char[] {'a','b','c'});
System.out.println(result6);
String result7 = String.valueOf(3);
System.out.println("문자열 바뀐 결과:" + result7);
StringBuilder, StringBuffer 클래스
String 클래스의 단점은 매번 새로운 객체를 생성하기에 메모리를 많이 소비하고 그로 인해 속도도 딜레이가 된다. String의 단점을 보완하여 만들어진 메서드가 바로 StringBuilder 와 StringBuffer 이다.(둘은 똑같다고 보면 된다.) StringBuilder 와 StringBuffer 는 기존 객체를 재활용하기에 매번 새로운 객체를 생성할 필요가 없기에 코드가 좀 더 간편해질 수 있고 속도가 좀 더 빠르다.
30만번의 객체를 만들 일은 없겠지만 속도차이를 보기 위해 극단적인 조건을 주어 속도를
출력해보니 StringBuilder, StringBuffer가 약 4초정도 더 빠른 것을 확인할 수 있었다.
public static void main(String[] args) {
long start = System.currentTimeMillis();
//String str = "";
//for(int i = 1; i < 300000; i++) { //객체 str 30만번 생성
// str+="A";
//}
//시간 단축
StringBuffer sb = new StringBuffer("");
for(int i = 1; i < 300000; i++) {
sb.append("A");
}
long end = System.currentTimeMillis();
System.out.println((end-start)*0.001);
}
StringBuilder, StringBuffer 클래스의 메서드들을 살펴보자!
append() : 기존 문자열의 뒤에(마지막) 문자열을 추가
insert() : 특정 위치에 문자열을 추가
delete() : 문자열을 삭제
deleteCharAt() : 특정 인덱스의 문자 하나를 삭제
replace() : 문자열의 일부분을 다른 문자열로 대체
setCharAt() : 문자열에서 주어진 index의 문자를 다른 문자로 대체
toString() : StringBuilder 객체의 값을 문자열로 반환
reverse() : 문자열을 거꾸로
String str = new String("Java");
//StringBuffer = StringBuilder (같음)
StringBuffer sb = new StringBuffer("Java");
System.out.println(str); //Java
System.out.println(sb); //Java
str = str + "Program"; //새로운 문자열 만듦
sb.append("Program"); //void 메서드고 붙이기만 했다.
System.out.println(str); //JavaProgram
System.out.println(sb); //JavaProgram
//문자열 마지막에 추가
sb.append("기존 문자열 마지막에 추가");
System.out.println(sb); //JavaProgram기존 문자열 마지막에 추가
//중간에 추가
sb.insert(11, "-");
System.out.println(sb); //JavaProgram-기존 문자열 마지막에 추가
//문자열 변경
sb.replace(0, 4, "자바"); //0이상 4미만
System.out.println(sb); //자바Program-기존 문자열 마지막에 추가
//문자열 삭제
sb.delete(0, 2);
System.out.println(sb);//Program-기존 문자열 마지막에 추가
//문자열로 형변환
//System.out.println(str.equals(sb));에러
String result = sb.toString();
//거꾸로
sb.reverse();
System.out.println(sb); //가추 에막지마 열자문 존기-margorP
Math 클래스
Math 클래스가 제공하는 메서드는 모두 static 메서드이므로 Math 클래스 이름으로 바로 사용이 가능합니다.
abs() : 절대값
ceil() : 올림값
floor() : 내림값
max() : 수를 비교하여 최대값 구하기
min() : 수를 비교하여 최소값 구하기
^random() : 랜덤값 구하기 (~이상~미만)
rint() : 현재 수에서 가까운 정수를 실수형태로 구하기
round() : 반올림값
//올림
double d = Math.ceil(1.3);
System.out.println(d);
//내림
double d2 = Math.floor(1.2);
System.out.println(d2);
//반올림
double d3 = Math.round(3.14);
System.out.println(d3);
//루트
double d4 = Math.sqrt(16);
System.out.println(d4);
//절대값
double d5 = Math.abs(-4);
System.out.println(d5);
//큰값
int i1 = Math.max(5, 3);
System.out.println(i1);
Wrapper 클래스 ⭐️
기본 타입(int,byte,String...)의 값을 갖는 객체를 생성할 수 있습니다.
기본 타입의 값을 포장 객체로 만드는 과정을 박싱(Boxing)이라 하며 포장 객체에서 기본 타입의 값을 얻어내는 과정을 언박싱(Unboxing)이라 합니다.
Byte, Short, Integer, Long, Float, Double, Boolean, Character

//기본타입
int a = 100;
double b = 3.14;
long c = 200L;
//기본형 -> 객체형 포장하는 작업을 boxing
//생성자로 객체 생성
Integer val = new Integer(a);
System.out.println(val); //100, 주소가 아닌 값이 반환됨
Double val2 = new Double(b);
Long val3 = new Long(c);
Object[] arr = {val,val2,val3}; //객체형 변수를 Object배열에 저장
//배열은 참조형 변수에만 넣어 사용할 수 있어서
//출력시 Arrays.toString 메서드를 사용하여 출력해야 값을 출력할 수 있다.
//객체형 -> 기본형으로 변경 unboxing
int a1 = val.intValue();
double d1 = val2.doubleValue();
long c1 = val3.longValue();
java 1.8버전부터 Autoboxing(자동형변환)을 지원합니다.
아래와 같이 간단하게 적을 수 있습니다.
//Autoboxing -> 자동형변환
Integer obj = 100;//자동 박싱
int obj1 = obj;//자동 언박싱
int a = 100;
Integer val = a;
a = val;
Object[] arr = {1,2,3};
//문자열을 숫자형으로 형변환
int v1 = Integer.parseInt("3"); //매우 중요 외우기!
int v2 = Integer.parseInt("34");
System.out.println(v1+v2);//37
Double v3 = Double.parseDouble("3.14");
long v4 = Long.parseLong("23332423534");
System.out.println(v1+v2+v3+v4);
'Java' 카테고리의 다른 글
java | 문자열 날짜로 변환 (string -> date) (0) | 2023.04.16 |
---|---|
TIL | compareTo(), compareToignorecase() (0) | 2022.10.25 |
TIL | Java - 예외처리 (0) | 2022.10.19 |
TIL | Java - 인터페이스 (0) | 2022.10.14 |
TIL | Java - abstract (0) | 2022.10.13 |