날아라쩡글이의 블로그입니다.

java API, java.Lang 본문

중앙 HTA (2106기) story/java API story

java API, java.Lang

날아라쩡글이 2021. 9. 30. 13:51
반응형

API(Application Programming Interface) 

  • 어플리케이션을 개발할 때 사용할 수 있도록 지원하는 라이브러리 
  • 응용프로그램의 Application을 개발할 때 많이 사용함 
  • 어떤 클래스와 인터페이스가 모여있는 집합(라이브러리)

Java API(Java Application Programming Interface)

  • 자바를 이용해서 어플리케이션을 구현할 수 있도록 지원하는 라이브러리들의 집합
  • 자바에서는 개발자들의 구현부담을 최소화하기 위해서 시스템, 입출력, 화면처리, 네트워크, 스레드등을 구현할 때 필요한 클래스 / 인터페이스(표준안)나 클래스들을 미리 구현해서 제공하고 있는데 이것을 JavaAPI라고 한다. ->즉, 미리 구현 해둔 것
  • 다른 언어들로 이뤄진 API가 있다. 
  • String, Scanner, System 등 자바에서 제공하는 라이브러리들이 많이 존재한다. 

API문서 

  • Java API에서 제공하는 여러인터페이스나 클래스들에 대한 설명 및 사용법을 제공하는 문서이다.  - java도큐먼트라고 불린다. 
  • 소스코드에서 Document주석을 사용해서 설명이나 사용법을 추가해놓으면, javadoc.exe를 이용하여 javaAPI문서가 자동으로 실행된다. API문서를 생성할 수 있다. 
  • 이클립스는 해당프로젝트에서 export->java->javadoc의 기능을 이용해서 API문서를 생성할 수 있다. 
    • 마우스 오른쪽 export -> java -> javadoc을 이용하면 API문서가 자동으로 만들어진다.
  • API문서는 HTML형식의 문서로 자동으로 작성한다. 

API Module ->Package ->Interface class로 나눈다. 

API구성 

  • 자바 9버젼부터 Module이 지원된다. 
  • Java SE 11 API 는 moule -> package ->interface ->내부 class가 들어 있다. 
  • JAVA SE 11 API는 Desktop에서 실행할 수 있는 응용프로그램 개발에 필요한 java API를 제공한다. 
  • 여러 Module로 구성되어 있다. 
  • Module 
    • java 9버젼부터 지원하는 자바의 새로운 그룹화 방식이다. 
    • java.base 모듈이 가장 많이 사용되는 모듈이다. 
    • 하나의 모듈은 여러가지 패키지를 포함하고 있다. 
    • 자바의 모든 API를 가지고와서 사용할 경우 문제점은 한번도 사용하지 않을 라이브러리를 가져와서 사용해야한다는것이다. 
    • 필요한 모듈만 지정해서 사용하고 싶다. 불필요한 라이브러리는 사용하고 싶지않아 자바9 버젼이상부터는 모듈이 생성되었다. 

Package

  • 관련있는 클래스나 인터페이스의 묶음이다. 
  • 같은 패키지 내의 클래스들끼리는 import없이 다른 클래스를 사용할 수 있지만, 패키지가 다른경우에는 반드시 import구문을 사용해서 포함시킬 클래스의 패키지명과 클래스명을 지정해야한다. 
  • 대표적인 패키지는 4가지가 있다.
  • java.lang
  • java.io
  • java.net
  • java.util

java.lang

  • 가장 인터페이스와 클래스를 포함하는 패키지이다. 
  • 이패키지의 인터페이스나 클래스는 구문없이 바로 사용할 수 있다. 
  • Object, System,String, Wrapper클래스들을 포함하고 있다. 

java.io

  • 입출력과 관련된 인터페이스, 클래스들을 포함하고 있는 패키지 이다. 
  • XXXInputStream, XXXOutPutStream,XXXReader,XXXWriter클래스를 포함하고 있다. 

java.net

  • 네크워크 통신을 지원하는 인터페이스, 클래스들을 포함하고 이쓴ㄴ 패키지이다. 
  • Socket, ServerSocket, Url등의 클래스들을 포함하고 있다. 

java.util

  • 자료구조, 날짜/시간등을 다루는 유용한 클래스들을 포함하고 있는 패키지 이다. 
  • 어플리케이션구현에서 가장 많이 사용하는 패키지이다. 
  • Collection,List,Set(자료구조 ) , map,Date,Calender(시간정보) 이다.

java.lang

  • 자바의 가장 기본적인 인터페이스, 클래스를 포함하고 있는 패키지이다. 
  • Object
    • 모든 객체의 최상위부모클래스다
    • Object클래스의 메소드는 모든 객체에서 사용가능하다.
  • Class
    • 객체의 설계도 정보를 표현하는 클래스다
    • 클래스명, 필드, 생성자, 메소드의 정보를 포함하고 있는 객체이다,
    • 자바->플렉션기술을 이용하여 설계도 정보를 획득할 수 있다
  • Boolean character,Integer, Double,Byte,Short
    • Wapper클래스이다. 
    • 기본자료형타입의 값을 객체로 표현할 때 사용되는 클래스이다. 
  • String,StringBuffer,StringBuilder
    • String은 문자열을 표현하는 클래스다. 
    • 문자열을 조작하는 다양한 메소드를 포함하고 있다. 
    • StringBuffer와 StringBuilder은 내부에 버퍼(임시저장소)가 있어서 문자열을 추가할 수 있다,
    • 문자열을 이어붙일때 사용한다, 
  • Math
    • 수학연산과 관련된 상수와 정적메소드를 제공한다
    • 클래스의 모든 메소드가 정적메소드이다. 
    • con,Sin,Tan 들의 메소드가 있다.
  • System,Runtime
    • System은 자바프로그램이 실행중인 운영체제와 관련된 정보를 제공하는 클래스다
    • 운영체제가 뭔지 CPU가 어떤건지 알아낼 수 있다,
    • Runtime은 운영체제와의 인터페이스를 지원하는 클래스다. 
    • 운영체제와 관련된 명령어를 실행할 수 있다. (cmd와 commed창)
  • Throwable
    • error와 exception클래스의 부모클래스이다. 
    • error와 exception은 자바에서 발생하는 모든 오류정보를 표현하는 클래스이다. (예외처리 시간때 배울예정이다)

Object Class

  • 배열을 포함한 모든 객체의 최상위 부모클래스다 
  • 명시적으로 extends를 사용해서 부모클래스를 지정하지 않으면 무조건 extends Objedct로 간주된다. 
  • Object의 모든 메소드는 모든 클래스가 상속받는다 
  • 모든 객체는 Object의 메소드를 사용할 수 있다. 
  • Object에는 객체와 관련된 필수 기능들이 구현되어있다. 
  • Boolean equals(Object obj)
    • 현재 객체와 전달받은 객체가 동일한 객체인지 여부를 반환한다. 
    • 객체들의 주소값(참조값)을 비교한다 
    • 재정의가 가능하다
    • 동일한 객체이면 true, 다르면 false의값을 반환한다. 
  • int hashCode()
    • 현재 객체의 해쉬함수를 시행해서 획득되는 숫자값을 반환한다
    • 일반적으로 같은 객체시 해시코드의 값도 동일하고 값이 다르면 다른 것이 나온다
    • 재정의 가능하다,
  • String toString()
    • 현재 객체에 대한 간단한 정보를 제공한다
    • 클래스이름 @16진수해시코드를 반환한다
    • 재정의 가능하다
  • Class<?>getClass()
    • 현재 객체에 대한 설계도(클래스 정보를 제공한다)
    • <>의 경우 제네릭이라는 문법이다. 이번주내로 배울 예정이다. 
  • Object Clone()
    • 현재 객체를 복제한 복사본을 생성해서 제공한다 
    • 원본과 복사본을 만들어서 복사본을 전달해준다
  • notify()
    • 다운로드가 여러개가 진행이 될 때 동시에 3개가 동작하게 되는 것. 
    • 동시작업이 가능한 걸 쓰레드라고 한다. 
    • wait가 기다리게 만들어주는데, 그것을 깨우는게 notify()- 1개만 깨우는것이다.
  • notifyAll()
    • wait를 전체 깨움
  • wait()
    • 시분할시 기다리게 만드는 
  • wait(lnogtimeoutmillis)
    • 기다리게 만들고 시간이 지나면 깨어남

equals(Object obj); 와 hasCode(); 메소드에 따른 동일성과 동등성

  • equals(Object obj);
  • 각각 new라는 연산자로 새로운 Student라는 객체를 만들어 낸다 . 
  •  
    Student라는 설계도가 같은 것 뿐이지 객체가 같은 것이 형성되는 것은 아니다. 
  • 어떤내용인지는 중요하지 않고, 참조하는 값이 제일 중요하다. 객체도 별개의 객체가 생성을 하게되고, 우연히 같은 매개변수를 가질 뿐이다. 
  • 그렇기 때문에 equalse를 사용하면 false로 출력이 된다. 
  • 같은 클래스로 만들어진 객체라도 서로 다른 객체이다. 
  • 같은 클래스로 객체를 만들 때마다 매번 새로운 객체가 생성되는 것이다. 
  • 생성된 객체마다 다른 주소값을 가지고 있다. 
  • Object의 boolean equals(Object obj)는 객체가 다르면 주소값도 다르기 때문에 주소값으로 같은 객체인지 여부를 판단하기 때문에 설계도가 동일하고 객체가 가지고 있는 값도 같은 값을 가지고 있더라도 객체가 서로 다르면 다른 객체로 판단한다.
  • 가끔 같은 객체인지 비교할 일이 존재한다.
  • 자바의 자료구조는 2번의 비교를 한다. 
  • 객체에 대해서 비교연산자를 사용할 수 있다. 비교연산자는 주소값을 비교한다. (==) 
  • == 비교연산자는 동일성의 법칙으로 이뤄지고 
  • equals는 동등성(값이 동등하냐 같은 형태의 값으로 이뤄져있는가)에 대한 비교를 한다. 

동등성의 경우 형태의 값이 동등하냐라는 의미하고 == 동일성의 법칙은 같은 주소값을 가지고있어서 동일(종류가 같냐)라는 의미로 사용된다. 

그러나 우리는 동등성의 원칙으로 값을 비교하고 싶어지기 때문에 hashCode()와 equals(Object obj)를 재정의하여 어느한가지이상의 값을 쓰고 동등한가에 대해서 출력이 가능하게 만들 수 있다. 객체는 다르지만 데이터가 같으면 같다고 출력을 할 수 있다 (동등성의 원칙)

Student에 대해서 매개변수도 입력하고 생성자도 입력하고, getter/setter의 값도 입력을 하였다. 그러면 hashCode()와 equals(Object obj)를 메소드재정의를 통하여 동등성의 원칙이 가능하도록 값을 입력한다. 

1. hashCode()의 값이 동등해지도록 만들어주어야한다. 

  •  
  • 순서
    1. hashCode()를 Override하기 위해 불러온다. 
    2. hashCode가 동일하면 비교하지 않고 출력한다. -->저장하지 않는다. 여기서 끝
    3. equals(Object obj)를Override하기 위해 불러온다.
    4. 비교할 객체가 null이면 저장하지 않는다 -->여기서 끝
    5. 비교할 객체가 비교표본과 같은 타입인지 확인후 다른타입이면 저장하지 않는다(instanceof연산자 사용) -->여기서 끝
    6. 비교할 객체와 비교표본을 동일한 타입으로 형변환하여 비교할 타입의 참조변수를 만들어서 입력한다. 
    7. 비교표본의 기본 키인 학번과 비교할 기본 키값이 다르면 저장하지 않는다. 
    8. 완성  return true로 완성시켜준다
  • equals의 메소드를 재정의하고 동등성의 비교를 통해 true가 된걸 확인할 수 있다. 
  • hashCode와 equals를 재정의하여 동등성 있게 만들었다. 
  • ==비교 연산자를 사용하면 동일성의 원칙으로 따지기 때문에 사용하면 다른 값이 출력된다. (주소값만 같냐 아니냐)
  • Alt + shift  + s 키를 누르면 자동으로 Generate hash() and equals()이 떠 입력을 자동으로 할 수 있다. 
  • 형변환을 시켜주는 이유 
  • 많이 사용하는 메소드 재정의 방법이다. 

final키워드 

  • 상속금지 (Class) , 재정의 금지 (Method) , 값 변경금지(Variable)
  • 최종클래스, 최종메소드, 최종 값으로 설정되기 때문에 값을 바꾸거나 변경할 수 없다. 

  • final 클래스 
    • A클래스는 부모가 될 수 없다.
    • A클래스는 상속받아서 자식클래스를 정의할 수 없다. 
  • final 메소드 
    • 메소드를 자식클래스에게 정의할 수 없다. 
    • B클래스를 상속받은 자식클래스에서 method()을 재정의할 수 없다. 
  • final정적변수 
    • 값을 변경할 수 없는 상수다. 
    • public static final을 함께 꼭 붙인다. 
  • final매개변수 
    • 메소드 호출시 전달 받은 값을 블록내의 수행문에서 변경할 수 없다. 
  • final지역변수 
    • 변수에 할당된 값을 변경할 수 없다. 
  • 대표적인 클래스로는 String 이다. 
    • String class public final class Stirng 
    • 자식을 가질 수 없는 상속이 안되는 클래스이다. 

Object의 int hashCode();

  • 객체의 해시코드 값을 정수로 반환한다. 
  • 같은 객체는 해시코드의 값도 같다.  해시코드의 값이 같으면 같은 객체다.
  • 그러나 역으로 해시코드의 값이 같다고해서 같은 객체는 아니다. 
  •  

이전에 포스팅이 되있는 글이다. 해시코드의 값이 같다고해서 같은 값이 아니다. 강사님과 같은 해시코드의 값이 나오는데 어떤 연산식으로 계산된 값이 아니라는 의미이다. 

Object의 String toString();

  • System.out.println(참조변수 );
  • System.out.println(참조변수.toString());;으로 변해서 실행된다. 
  • 객체의 정보 ("클래스의 전체이름@해시코드")를 문자열로 반환한다. 
  • 클래스의 전체이름은 클래스를 포함한 패키지의 이름이다. 
  • 자바는 주소값을 표현해주지 않는다. 
  • String 객체를 참조하는 참조변수를 System.out.println()으로 출력한다.
  • String클래스는 Object의 String toString()메소드를 String객체가 포함하고 있는 실제 문자열을 반환하도록 재정의한다. 
  • String은 동등성 비교는 hash/ equals /toString()으로 재정의한다.

재정의 클래스 

  • 값을 담는 클래스가 존재한다. VO,DTO,모델
  • 1. toString으로 화면에서 출력했을 때 toString의 값은 아무의미가 없다. 
  • 2.Student의 클래스로 가서 hashCode와 equals의 메소드 재정의한 아래에 
  • @Override
    public String toString() {
    // TODO Auto-generated method stub
    return "Student [no=" +no+" , name = "+name+",dept ="+dept+",grade ="+grade+"]";
    //toString()메소드를 임의의 문자열로 재정의 함 
    }
  • 으로 재정의한다. 
  • hash, equals, toString의 경우 많이 메소드 재정의하여 사용한다. 
  • 이 또한 Alt + Shift + s 키를 누르면 toString()으로 재정의가 가능하다. 
  • 혹은 마우스 오른쪽에 Source -> Generate toString()으로 재정의가 가능하다. 

Open Source 

  • 라이센스는 있지만, 소스코드가 공개되어있는 라이브러리로 누구나 다운받아서 사용할 수 있다. 
  • 누구나 소스코드를 변경해서 사용할 수 있다. 
  • 누구나 상업적인 목적으로 사용할 수 있다. 
  • 범용성을 갖고 있는 소스이다. 

Class<?> getClass() 사용방법

  • open source를 사용하고 수정을 하면 어떤 변수나 타입들이 들어가있는지 모를때 사용하는 것이다. 
  • java.Lang.reFlect.*의 Field import를 사용하며, parameter의 정보를 알아내고 
  • method의 정보를 알아낼 수 있다. 
  • 메소드, 생성자, 정보 부가적인 정보를 알아낼 수 있다. 

Clone()사용방법 

  • java.Lang을 확인하면 ~~able인 경우 interface이다. 
  • 내용에 Cloneable이라는 interface가 존재한다. 이것을 implements을 한 것만 Clone()메소드를 이용할 수 있다는 것이다. 
  • 내용에 하나의 메소드도 존재하지 않는다. 

마크업 인터페이스 (MarkUp Interface)

  • 특별한 기능이 존재하지 않는다 
  • implements 했는지 안했는지가 중요하다. 
    • A클래스는 복제가 불가능한 클래스다. 
    • A클래스가 배열에 여러가지 저장되어 있을 때 특정값을 기준으로 정렬할 수 없다. 
    • A클래스는 네트워크로 주고받을 수 없는 클래스다. 
  • Class B
    • B클래스는 복제가 가능한 클래스다. 
    • B클래스가 배열에 여러가지 저장되어 있을 때 특정값을 기준으로 정렬할 수 없다. 
    • B클래스는 네트워크로 주고받을 수 없는 클래스다.
  • Class C
    • C클래스는 복제가 가능한 클래스다. 
    • C클래스의 배열은 C끼리 비교하여 순서대로 정렬할 수 있다. 
    • B는 일렬로 줄세울 수 있는 클래스이다. 그래서 네트워크로 객체를 주고 받을 수 있다. 
  • 마크업인터페이스란
    • 추상메소드가 하나도 없는 인터페이스다. 
    • 클래스가 특정 인터페이스를 구현했는지의 여부를 단순히 표시할 목적으로만 사용하는 인터페이스다. 
    • Cloneable, Serializable등이 대표적인 마크업 인터페이스다. 

toString()메소드의 경우 정보를 출력하는 용도로 사용하면 안된다. 값이 잘 못된걸 확인하는 재정의 후 디버깅 목적으로 사용해야한다. 값이 제대로 들어간건지 확인하기 위한 용도이다. 

 

반응형

'중앙 HTA (2106기) story > java API story' 카테고리의 다른 글

Set interface, List interface(iterator)  (0) 2021.10.07
Generic(제네릭)  (0) 2021.10.05
System, Wrapper, math class  (0) 2021.10.03
StringBuilder, StringBuffer  (0) 2021.10.03
String Class  (0) 2021.10.01
Comments