[Java] 기본 API 클래스

오연주·2022년 12월 9일
0

Java

목록 보기
6/7
post-thumbnail

📘 1. java.lang 패키지

  • java.lang 패키지는 자바 프로그램의 기본적인 클래스를 담고 있는 패키지다.
    그래서 java.lang 패키지에 있는 클래스와 인터페이스는 import 없이 사용할 수 있다.
클래스용도
Object- 자바 클래스의 최상위 클래스로 사용
System- 표준 입력 장치(키보드)로부터 데이터를 입력받을 때 사용
- 표준 출력 장치(모니터)로 출력하기 위해 사용
- 자바 가상 기계를 종료할 때 사용
- 쓰레기 수집기를 실행 요청할 때 사용
Class- 클래스를 메모리로 로딩할 때 사용
String- 문자열을 저장하고 여러 가지 정보를 얻을 때 사용
Wrapper
(Byte, Short, Character, Integer, Float, Double, Boolean, Long)
- 기본 타입의 데이터를 갖는객체를 만들 때 사용
- 문자열을 기본 타입으로 변환할 때 사용
- 입력값 검사에 사용
Math- 수학 함수를 이용할 때 사용

📌 자바 API 도큐먼트 p.467

  • API는 라이브러리라고 부르기도 하는데, 프로그램 개발에 자주 사용되는 클래스 및 인터페이스의 모음을 말한다.

https://docs.oracle.com/en/java/javase/index.html


📌 Object 클래스 p.471

  • 클래스를 선언할 때 extends 키워드로 다른 클래스를 상속하지 않더라도 암시적으로 java.lang.Object 클래스를 상속하게 된다. 따라서 자바의 모든 클래스는 Object 클래스의 자식이거나 자손 클래스이다. Object는 자바의 최상위 부모 클래스에 해당됨.

equals() : 객체비교

  • equals()메소드의 매개 타입은 Object인데 이것은 모든 객체가 매개값으로 대입될 수 있음을 말한다. 왜냐하면 모든 객체는 Object 타입으로 자동 타입 변환될 수 있기 때문. 반환값 : true, false
  • String 객체의 equals()메소드는 Object의 equals() 메소드를 재정의(오버라이딩)해서 문자열 비교로 변경한 것이다.

객체 해시코드(hashCode()) p.474

  • 객체 해시코드란 객체를 식별하는 하나의 정수값을 말한다.
    Object클래스의 hashCode()메소드는 객체의 메모리 번지를 이용해서 해시코드를 만들어 리턴하기 때문에 객체마다 다른 값을 가지고 있다.
  • 두 객체가 동등한지 hashCode를 이용해서 비교하는 방법은 hashCode() 메소드를 실행해서 리턴된 해시코드 값이 같은지를 보고, 해시코드 값이 다른 다른 객체로 판단하고, 해시코드 값이 같으면 equals()메소드로 다시 비교한다.

객체 문자 정보(toString())

  • Object 클래스의 toString()메소드는 객체의 문자 정보를 리턴한다.
    객체의 문자 정보란 객체를 문자열로 표현한 값을 말한다.
    기본적으로 Object 클래스의 toString() 메소드는 '클래스이름@16진수해시코드'로 구성된 문자 정보를 리턴한다.

📌 System 클래스 p.479

  • 자바 프로그램은 운영체제에서 바로 실행되는 것이 아니라 JVM위에서 실행된다. 따라서 운영체제의 모든 기능을 직접 이용하기는 어렵다.
    하지만 java.lang 패키지에 속하는 System 클래스를 이용하면 운영체제의 일부 기능을 이용할 수 있다. 즉, 프로그램 종료, 키보드로부터 입력, 모니터로 출력, 현재 시간 읽기 등이 가능하다.
  • System 클래스의 모든 필드와 메소드는 정적(static)필드와 정적(static)메소드로 구성되어 있다.

프로그램 종료(exit())

  • exit() 메소드는 현재 실행하고 있는 프로세스를 강제 종료시키는 역할을 한다.
    exit() 메소드는 int매개값을 지정하도록 되어 있는데, 이 값을 종료 상태값 이라고 부른다. 정상 종료는 0 값이다.
    System.exit(0)

현재 시각 읽기(currentTimeMillis(), nanoTime())

  • System 클래스의 currentTimeMillis() 메소드와 nanoTime() 메소드는 컴퓨터의 시계로부터 현재 시간을 읽어서 밀리세컨드(1/1000초) 단위와 나노세컨드(1/1000000000초) 단위의 long값을 리턴한다.
    long time = System.currentTimeMillis();
    long time = System.nanoTime();
  • 리턴값은 주로 프로그램의 실행 소요 시간 측정에 사용된다.
    (프로그램 끝 시각 - 프로그램 시작 시각)

📌 Class 클래스 p.482

  • 자바는 클래스와 인터페이스의 메타 데이터(클래스의 이름, 생성자 정보, 필드 정보, 메소드 정보)를 java.lang 패키지에 소속된 Class 클래스로 관리한다.

Class 객체 얻기(getClass(), forName())

  • 클래스로부터 얻는 방법
    • Class clazz = 클래스이름.class
    • Class clazz = Class.forName("패키지...클래스이름")
  • 객체로부터 얻는 방법
    • Class clazz = 참조변수.getClass();

클래스 경로를 활용해서 리소스 절대 경로 얻기


📌 String 클래스 p.484

String 생성자

  • 자바의 문자열은 java.lang 패키지의 String 클래스의 인스턴스로 관리된다.

String 메소드

리턴 타입메소드 이름(매개 변수)설명
charcharAt(int index)특정 위치의 문자를 리턴
booleanequals(Object anObject)두 문자열을 비교
byte[]getBytesbyte[]로 리턴
byte[]getBytes(Charset charset)주어진 문자셋으로 인코딩한 byte[]로 리턴
intindexOf(String str)문자열 내에서 주어진 문자열의 위치를 리턴
intlength()총 문자의 수를 리턴
Stringreplace(CharSequence target, CharSequence replacement)target부분을 replacement로 대치한 새로운 문자열을 리턴
Stringsubstring(int beginIndex)beginIndex 위치에서 끝까지 잘라낸 새로운 문자열을 리턴
Stringsubstring(int beginIndex, int endIndex)beginIndex 위치에서 endIndex 전까지 잘라낸 새로운 문자열을 리턴
StringtoLowerCase()알파벳 소문자로 변환한 새로운 문자열을 리턴
StringtoUpperCase()알파벳 대문자로 변환한 새로운 문자열을 리턴
Stringtrim()앞뒤 공백을 제거한 새로운 문자열을 리턴
StringvalueOf(int i)
valueOf(double d)
기본 타입 값을 문자열로 리턴

문자 추출(charAt())

  • charAt()메소드는 매개값으로 주어진 인덱스의 문자를 리턴한다. 여기서 인텍스란 0부터 '문자열 길이-1'까지의 번호를 말한다.

문자열 비교(equals())

  • 기본타입 변수의 값을 비교할 때에는 ==연산자를 사용하고, 문자열을 비교할 때는 .equals()를 사용한다.

  • 자바는 문자열 리터럴이 동일하다면 동일한 String 객체를 참조하도록 되어 있다. 그래서 strVar2와 strVar3는 같은 객체를 참조한다.
    (new String()은 아예 새로운 객체를 생성하는 것이고 ""로 지정한 것은 미리 만들어진 것을 가져와 쓰므로 ""을 사용하는 것이 메모리에 무리가 덜 간다.)

  • 원래 equals()는 Object클래스의 번지 비교 메소드이지만, String 클래스가 재정의해서 문자열을 비교하도록 변경했다.

바이트 배열로 변환(getBytes()) p.490

  • 종종 문자열을 바이트 배열로 변환하는데 대표적인 예로 네트워크로 문자열을 전송하거나 문자열을 암호화할 때 문자열을 바이트 배열로 변환하는 경우가 있다.
  • getBytes() 메소드는 시스템의 기본 문자셋으로 인코딩된 바이트 배열을 리턴한다.
  • 바이트 배열로 변환하는 메소드 두가지
    • byte[] bytes = "문자열".getBytes();
    • byte[] bytes = "문자열".getBytes(Charset charset);
      - 매개변수 charset부분에 "EUC-KR" 이나 "UTF-8"등등을 넣으면 된다.

문자열 찾기(indexOf())

  • indexOf() 메소드는 매개값으로 주어진 문자열이 시작되는 인덱스를 리턴한다. 만약 주어진 문자열이 포함되어 있지 않으면 -1을 리턴한다.
    String subject = "자바 프로그래밍";
    int index = subject.indexOf("프로그래밍"); // index값은 3

문자열 길이(length())

  • length() 메소드는 문자열의 길이(문자의 수)를 리턴한다.
    String subject = "자바 프로그래밍";
    int length = subject.length(); // length는 8이다. 공백을 포함함

문자열 대치(replace())

  • replace() 메소드는 첫 번째 매개값인 문자열을 찾아 두 번째 매개값인 문자열로 대치한 새로운 문자열을 생성하고 리턴한다.
    String oldStr = "자바 프로그래밍";
    String newStr = oldStr.replace("자바", "Java"); // newStr은 Java 프로그래밍이 된다.

문자열 잘라내기(substring())

  • substring() 메소드는 주어진 인덱스에서 문자열을 추출한다.
    String ssn = "880815-1234567";
    String firstNum = ssn.substring(0,6); // 0부터 6까지 추출 880815
    String secondNum = ssn.substring(7); // 7부터 끝까지 추출 1234567

알파벳 소/대문자 변경(toLowerCase(), toUpperCase())

  • toLowerCase() 문자열을 모두 소문자로 바꾼 새로운 문자열을 생성한 후 리턴한다.
  • toUpperCase() 문자열을 모두 대문자로 바꾼 새로운 문자열을 생성한 후 리턴한다.
    String original = "Java Programming";
    String lowerCase = original.toLowerCase() // lowerCase는 java programming
    String upperCase = original.toUpperCase() // upperCase는 JAVA PROGRAMMING
  • 문자1.equalsIgnoreCase(문자2) : 대소문자 구분없이 문자열 자체만으로 비교할 수 있는 메소드

문자열 앞뒤 공백 잘라내기(trim())

  • trim() 메소드는 문자열의 앞뒤 공백을 제거한 새로운 문자열을 생성하고 리턴한다.
String oldStr = "    자바 프로그래밍     "
String newStr = oldStr.trim(); // 자바 프로그래밍

문자열 변환(valueOf())

  • valueOf() 메소드는 기본 타입의 값을 문자열로 변환하는 기능을 가지고 있다.
    String str1 = String.valuesOf(10) // 10
    String str2 = String.valuesOf(10.5) // 10.5
    String str3 = String.valuesOf(true) // true

📌 Wrapper(포장) 클래스 p.498

  • 자바는 기본 타입의 값을 갖는 객체를 생성할 수 있다. 이런 객체를 포장객체라고 하는데, 그 이유는 기본 타입의 값을 내부에 두고 포장하기 때문이다.
    포장 객체의 특징은 포장하고 있는 기본 타입 값은 외부에서 변경할 수 없다는 점이다.
    만약 내부의 값을 변경하고 싶다면 새로운 포장 객체를 만들어야 한다.

    기본 타입포장 클래스
    byteByte
    charCharacter
    shortShort
    intInteger
    longLong
    floatFloat
    doubleDouble
    Booleanboolean

박싱(Boxing)과 언박싱(Unboxing)

  • 기본 타입의 값을 포장 객체로 만드는 과정을 박싱(Boxing)이라고 하고, 반대로 포장 객체에서 기본 타입의 값을 얻어내는 과정을 언박싱(Unboxing)이라고 한다.

  • 아래의 표는 기본타입의 값을 박싱하는 방법이다. 간단하게 포장 클래스의 생성자 매개값으로 기본 타입의 값 또는 문자열을 넘겨주면 된다.

    기본 타입의 값을 줄 경우문자열을 줄 경우
    Byte obj = new Byte(10);Byte obj = new Byte("10");
    Character obj = new character('가');없음
    Short obj = new Short(100);Short obj = new Short("100");
    Integer obj = new Integer(1000);Integer obj = new Integer("1000");
    Long obj = new Long(10000);Long obj = new Long("10000");
    Float obj = new Float(2.5F);Float obj = new Float("2.5F");
    Double obj = new Double(3.5);Double obj = new Double("3.5");
    Boolean obj = new Boolean(true);Boolean obj = new Boolean("true");
  • 생성자를 이용하지 않아도 다음과 같이 각 포장 클래스마다 가지고 있는 정적 valueOf() 메소드를 사용할 수도 있다.

    Integer obj = Integer.valueOf(1000);
    Integer obj = Integer.valueOf("1000");
  • 이렇게 박싱된 포장 객체에서 다시 기본 타입의 값을 얻어내기 위해서는(언박싱) 각 포장 클래스마다 가지고 있는 '기본타입이름 + Value()'메소드를 호출하면 된다.


자동 박싱와 언박싱

  • 기본 타입 값을 직접 박싱, 언박싱하지 않아도 자동적으로 박싱과 언박싱이 일어나는 경우가 있다. 자동 박싱은 포장 클래스 타입에 기본값이 대입될 경우에 발생한다. 예를들어 int 타입의 값을 Integer 클래스 변수에 대입하면 자동 박싱이 일어나 힙 영역에 Integer 객체가 생성된다.
    Integer obj = 100;
  • 자동 언박싱은 기본 타입에 포장 객체가 대입되는 경우와 연산에서 발생한다. 예를들어 Integer객체를 int 타입 변수에 대입하거나, Integer객체와 int값을 연산하면 Integer 객체로부터 int값이 자동 언박싱되어 연산된다.
    Integer obj = new Integer(200);
    int value1 = obj; // 자동 언박싱
    int value2 = obj + 100; // 자동 언박싱

문자열을 기본 타입 값으로 변환

  • 포장 클래스의 주요 용도는 기본 타입의 값을 박싱해서 포장 객체로 만드는 것이지만, 문자열을 기본 타입 값으로 변환할 때에도 많이 사용된다.
    대부분의 포장 클래스엔 parse + 기본 타입 이름으로 되어 있는 정적(static) 메소드가 있다. 정적 메소드는 문자열을 매개값으로 받아 기본 타입 값으로 변환한다.


포장 값 비교

  • 포장 객체는 내부의 값을 비교하기 위해 ==와 != 연산자를 사용하지 않는 것이 좋다. 이 연산자는 내부의 값을 비교하는 것이 아니라 포장 객체의 참조를 비교하기 때문이다.

    Integer obj1 = 300;
    Integer obg2 = 300;
    System.out.println(obj1 == obj2); // false가 나온다.
  • 박싱된 값이 아래의 표에 나와있는 범위의 값이라면 ==와 != 연산자로 내부의 값을 바로 비교할 수 있지만, 그 이외의 경우에는 언박싱한 값을 얻어 비교해야한다.

📌 Math 클래스 p.504

  • java.lang.Math 클래스는 수학 계산에 사용할 수 있는 메소드를 제공한다. Math 클래스가 제공하는 메소드는 모두 정적(static)메소드 이므로 Math 클래스로 바로 사용이 가능하다.

  • Math.random() 메소드는 0.0과 1.0 사이의 범위에 속하는 하나의 double 타입의 값을 리턴한다. 0.0은 범위에 포함되고 1은 포함되지 않는다.
    0.0 <= Math.random() < 1.0

profile
안녕하세요. 오연주입니다!👩🏻‍🚀

0개의 댓글