프로그래밍 언어들

API와 API 문서 보는 법

토픽 프로그래밍 언어들 > Java

기본 패키지와 사용자 정의 로직

아래 코드를 보자.

System.out.println(1);

지금까지 무수히 많은 예제에서 사용했던 코드다. 이것이 화면에 어떤 내용을 출력하는 것이라는 건 이미 알고 있다. 하지만 도대체 우리가 정의한 적이 없는 이 명령은 무엇일까?를 생각해볼 때가 왔다. 문법적으로 봤을 때 println은 메소드가 틀림없다. 그런데 메소드 앞에 Sytem.out이 있다. System은 클래스이고 out은 그 클래스의 필드(변수)이다. 이 필드가 메소드를 가지고 있는 것은 이 필드 역시 객체라는 것을 알 수 있다. 그리고 System을 인스턴스화한적이 없음에도 불구하고 필드 out에 접근할 수 있는 것은 out이 static이라는 것을 암시한다.

그럼 System 클래스는 어디서 나타난 것일까? 아래의 코드를 보자.

package org.opentutorials.javatutorials.library;
public class LibraryDemo1 {
    public static void main(String[] args) {
		System.out.println(1);
	}
}

 아래의 코드는 위의 코드와 같다.

package org.opentutorials.javatutorials.library;
import java.lang.*;
public class LibraryDemo1 {
    public static void main(String[] args) {
		System.out.println(1);
	}
}

2행의 import java.lang.*;이 보이는가? 패키지 java.lang은 자바 프로그래밍을 하기 위해서 필수적인 클래스들을 모아둔 패키지다. 따라서 사용자의 편의를 위해서 자동으로 로딩을 하고 있는 것이다.

클래스 System은 바로 이 java.lang의 소속이다.

자바 에플리케이션을 만든다는 것은 결과적으로 자바에서 제공하는 패키지들을 부품으로 조립해서 사용자 정의 로직을 만드는 과정이라고 할 수 있다. 

API

API란 자바 시스템을 제어하기 위해서 자바에서 제공하는 명령어들을 의미한다. Java SE(JDK)를 설치하면 자바 시스템을 제어하기 위한 API를 제공한다. 자바 개발자들은 자바에서 제공한 API를 이용해서 자바 애플리케이션을 만들게 된다. 패키지 java.lang.*의 클래스들도 자바에서 제공하는 API 중의 하나라고 할 수 있다.

API가 무엇인지 궁금하다면 아래의 동영상을 시청하자.

http://opentutorials.org/course/1189/6205

API 문서

자바 플랫폼 위에서 동작하는 자바 애플리케이션을 개발하는 개발자들은 자바 API를 사용하게 된다. 그런데 자바에서 제공하는 API는 방대하기 때문에 이것을 이용하기 위해서는 API의 목록과 사용법이 체계적으로 정리된 문서를 이용할 수 있어야 한다.

아래 페이지는 Java의 각종 문서들을 모아둔 웹페이지다.

http://docs.oracle.com/javase/

이중에서 API Documentation을 클릭한다. 아래와 같은 웹사이트가 보일 것이다.

각 구획 별 의미는 아래와 같다.

  1. 자바에서 기본적으로 제공하는 API 패키지의 리스트
  2. 1번에서 선택한 패키지들만 보여주는 클래스 리스트
  3. 2번에서 선택한 클래스의 맴버들을 보여주는 리스트

자바를 통해서 어떤 문제를 해결하기 위해서는 우선 자신이 필요한 로직이 담겨있을 것으로 기대되는 패키지의 후보군을 선정해야 한다. 자바에서 제공하는 기본 패키지들은 아래와 같은 기능을 담고 있다.

  • java.lang
    자바 프로그래밍을 위한 가장 기본적인 패키지와 클래스를 포함하고 있다.
  • java.util
    프로그램을 제어하기 위한 클래스와 데이터를 효율적으로 저장하기 위한 클래스들을 담고 있다.
  • java.io
    키보드, 모니터, 프린터, 파일등을 제어할 수 있는 클래스들의 모음
  • java.net
    통신을 위한 기능들을 담고 있다.

실습을 해보자. 자바 API 문서에서 System.out.println 메소드를 직접 찾아보자.

댓글

댓글 본문
  1. irish1998
    2024.07.16 Done
  2. wwwqiqi
    완료
  3. 치키티타
    220817
  4. PassionOfStudy
    복습 3일차!
  5. 김은희
    20220614 완료
  6. 치키티타
    220613
  7. PassionOfStudy
    API와 API 문서 보는 법!
  8. 20220427
  9. 모찌말랑카우
    22.02.17 완료
  10. 민둥빈둥
    22.02.08
  11. aesop0207
    220208 Tue.
  12. 행달
    22.02.05 완료!
  13. 드림보이
    2021.12.10. API와 API 문서 보는 법 파트 수강완료
  14. syh712
    2021-12-08
    `System.out.println(1);`
    println은 메소드
    System은 클래스
    out은 그 클래스의 필드(변수)
    이 필드가 메소드를 가지고 있는 것은 이 필드 역시 객체라는 것
    System을 인스턴스화한적이 없음에도 불구하고 필드 out에 접근할 수 있는 것은 out이 static이라는 것을 암시.

    패키지 java.lang은 자바 프로그래밍을 하기 위해서 필수적인 클래스들을 모아둔 패키지다. 따라서 사용자의 편의를 위해서 자동으로 로딩을 하고 있는 것이다. 클래스 System은 바로 이 java.lang의 소속 ⇒ 자바 에플리케이션을 만든다는 것은 결과적으로 자바에서 제공하는 패키지들을 부품으로 조립해서 사용자 정의 로직을 만드는 과정임.

    API란 자바 시스템을 제어하기 위해서 자바에서 제공하는 명령어들을 의미한다.
    - java.lang자바 프로그래밍을 위한 가장 기본적인 패키지와 클래스를 포함하고 있다.
    - java.util프로그램을 제어하기 위한 클래스와 데이터를 효율적으로 저장하기 위한 클래스들을 담고 있다.
    - java.io키보드, 모니터, 프린터, 파일등을 제어할 수 있는 클래스들의 모음
    - java.net통신을 위한 기능들을 담고 있다.
  15. 네제가해냈습니다
    211118
  16. IaaS
    2021.11.02 수강완료
  17. H4PPY
    1031
  18. 미NI언
    10.12 완료
  19. 베이스박
    210826 학습완료
  20. super1Nova
    210824
  21. 악어수장
    2021-05-07 완료
  22. 하연주
    210208 완료
  23. 김태현
    20200825
  24. EunSeok Kang
    잘봤습니다. 감사합니다. 20200812
  25. hvii
    20200811
  26. 김승민
    2020-04-17
    감사합니다~
  27. aminora
    파이썬 라이브러리랑 같은 개념이네요 ㅎ 감사합니다.
  28. zozo
    재밌어요! 하도 API, API해서 뭔 - 가 했는디 속이 다 시원할만큼 설명해주셨네요, 헤헤
    자바 시작 첫날 생각나네요, sysout이 대체 무슨 뜻이지 궁금했었는데...! 역시 갓고잉....
  29. 토게츄
    와우... 리얼 설명 이걸로 종결이네요.
    대화보기
    • 초짜
      문제: println은 다른 클래스인 Printstream의 method인데, 어떻게 불러올 수 있었을까?
      (이전 영상을 보아도 한 클래스가 다른 클래스의 내용을 실행시킬 수 없었음)
      설명: out이라는 변수를 선언함으로서 새로운 instance를 만들수 있었고, 그 변수에 담긴 것이 Printstreme 클래스(새로운 instance내용). 따라서 다른 클래스의 method를 객체 선언을 통해 실행시킬 수 있었다.라는 말인가요
      정말 어렵네요 ㅠㅠ
    • 허공
      감사합니다!
    • PassionOfStudy
      191004(금) - (3)
      수강완료~
    • Jieut
      API 문서에서 System 클래스의 필드인 out을 클릭해보면

      System 클래스 안에는 다음과 같이 선언되어 있음을 알 수 있습니다.

      "public static final PrintStream out"

      예를 들면 System 클래스의 소스를 열어보면 아래와 같이 코딩되어 있음을 예상 할 수 있습니다.

      class System {

      PrintStream out = new PrintStream();

      ....

      }

      System 클래스가 PrintStream 클래스의 println() 메소드를 사용하기 위해

      "out" 이라는 변수명으로 PrintStream 클래스를 생성한 것이죠,

      "out"은 PrintStream 이라는 클래스의 인스턴스 이름을 out으로 정한 것일 뿐

      out이라는 이름을 temp로 바꿔도 무방할 것입니다.

      out 자체가 PrintStream이기 때문에 상속과는 무관하게

      PrintStream 클래스 내에 있는 println() 을 사용할 수 있는 것입니다.

      도움이 되셨으면 좋겠습니다!
      대화보기
      • 홍주호
        20190914 완료
      • 다나가
        190904 - 수강완료!!!
      • doevery
        수강완료
      • 도움되시라고
        객체를 저장한 공간을 변수라고 합니다.

        out은 변수이자 static으로 메모리에 올라간 공간이고
        그것에 담긴 객체는 PrintStream 인것이죠.

        static이기때문에 클래스명으로 접근하여 호출이 가능한데
        static이 아니고 접근제한자가 public이라면 new System().out 이런식이 되겠죠. (System의 기본생성자도 public이여야합니다.)

        하지만 정적변수(static variable)도 변수와 기본적으로 같기때문에 어떤 객체나 값을 넣어줘야만 사용할 수 가 있습니다.
        아니면 기본적으로 null이 들어있죠. C에서는 쓰레기값이 들어있을거구요.
      • 냥냥펀치
        여기서 out 을 쓰는 이유는 static 은 인스턴스멤버(인스턴스변수와 인스턴스메서드)는 반드시 객체를 생성한 후에만 참조 또는 호출이 가능하기 때문에 클래스멤버가 인스턴스멤버를 참조, 호출하기 위해서는 객체를 생성하여야 하기 때문인걸로 생각합니다. 그러므로 out 이 println 을 참조하였다 라고 생각하지 마시고 out 을 쓰는 클래스 PrintStream 이 println 을 참조하였다 라고 생각하시면 공부하는데 도움이 될것같습니다.
        여기에 궁금한거나 제가 틀린게 있다 하시는분들은 답글 달아주세요 ^^
        대화보기
        • 송둥보고싶다
          설명미쳤다 감사합니다
        • 6/17시작
          7월 2일 완료
        • 자바공부
          감사합니다!
        • 라또마니
          감사합니다. API
        • 많은 것을 배우고 갑니다. 몇 가지 의문이 있었는데 알게 되었습나다, 감사합니다,.
        • 헷갈리네요
          데이터 타입이 PrintStream인 out이라는 필드는 PrintStream 의 모든 클래스를 상속받기 때문에 System.out.println이 가능한 건가요?
          그러니까 쉽게 예를들어
          PrintStream a = new PrintStream();
          a.println;
          이렇게 사용자 정의 필드를 만들어서 a에서 println을 사용하는 것과 같은 원리인가요?
        • 이장후
          원래 어떤 언어도 처음부터 모든 줄을 이해할 순 없어..
          아 이래서 이런거였군 하는 재미가 있는 법이지
          대화보기
          • j-graphy
            2019. 2. 19. 학습완료
          • ㅎㅇ
            out도 PrintStream타입의 객체입니다. println은 PrintStream에 선언된 메소드이구요.
            대화보기
            • 초-짜
              저도 이 부분이 좀 복잡하게 느껴집니다만..
              변수가 어떻게 메소드를 호출해? 에 초점을 두시지 마시고
              out이 객체인 것에 초점을 두시면 조금은 아~ 하실 수 있을 듯 합니다
              저도 지금 완-벽-히 이해 한 것이 아니라 댓글 다는 것이 조금은 두렵지만서도 끄적여 보겠습니다..

              System.out.println은 스태틱 변수인 out에 접근했습니다.
              스태틱 변수라는 말에 주목해 봅시다.
              static이란 말은 객체의 생성 없이도 클래스 변수나 클레스 메소드에 접근할 수 있음을 뜻 합니다.
              static을 선언하는 순간 메모리에 변수와 메소드가 잡히기 때문입니다.
              즉 static변수인 out 그러면서도 단순한 변수가 아닌 객체인 out에 접근한 것이기 때문에
              out, 즉 PrintStream객체의 변수와 메소드를 사용할 수 있음을 뜻합니다.

              제가 틀린것이 있다면 댓글 다셔서 교정해주세요!! ㅜㅜ
              대화보기
              • 깜순이짱
                솔직히 궁금하네요.
                out이라는 변수가 어떻게 println이라는 메소드를 호출하는지.
                변수가 메소드를 호출할 수 있는 건가요?
                아시는 분 답변부탁드립니다.
                대화보기
                • hotelalpha
                  감사합니다 잘배워갑니다.