우리는 우리의 컴퓨터와 운영체제 위에 자바를 설치했다.
자바의 라이브러리에는 다양한 도구들이 있는데, 모니터에 출력했을 때 사용했던 System 객체를 비롯하여 Date, Math, PrintWriter 등 다양한 도구들이 있다.
또한 자바 프로그램을 만들 때 자바의 도구들을 응용하여 작업들을 시간 순서에 따라 동작하도록 만들었다.
이러한 시간적인 순서에 주목해 우리가 만든 것들을 프로그램(Program)
이라고 부르고,
도구의 응용에 주목해 애플리케이션(Application)
이라고 부르는 것이다.
자바는 자바의 도구들을 응용하여 사용하기 위해 일정한 조작 장치를 구성하였는데,
이것을 자바 API(Application Programming Interface)
라고 한다.
자바 프로그램은 또 다른 자바 프로그램에서 사용될 수 있는데,
이렇게 다른 프로그램에서 사용할 수 있도록 만들어주는 장치 역시 API이다.
이렇게 만든 자바 프로그램은 사용자, 즉 유저들이 사용할 수 있고,
사용자들이 자바 프로그램을 사용할 수 있도록 만들어둔 조작 장치가 UI(User Interface)
이다.
예를들어 이전 강좌에서 실습했던 커맨드 라인 시스템의 아규먼트, 데스크톱 앱의 버튼, 웹 페이지의 링크 등이 있다.
자바 프로그램을 만들기 위해 자바의 도구들을 사용할 수 있게 만든 장치인 자바 API를 이용한다.
오라클에서는 자바 API의 설명서인 Java API documentation을 제공하고 있다.
자바 API Documentation 페이지
에 접속한다.패키지
에 대한 정보를 담고 있다.클래스
에 대한 정보를 담고 있다.만약 내가 수학과 관련한 작업을 해야하는데, 직접 만들기는 번거로울 것 같다고 생각이 들면, Math 클래스를 이용해 정보를 확인해 보면 될것이다.
Math 클래스
는 java.lang 패키지
에 속해있음을 알 수 있다.변수(Variable/Field)
들에 대해서도 알 수 있다.
메소드(Method)
들의 정보들도 찾을 수 있다.클래스는 서로 연관된 변수와 메소드로 구성되고, 연관된 클래스들을 묶어서 정리한 것을 패키지라는 것을 알게 되었다.
public class ClassApp {
public static void main(String[] args) {
System.out.println(Math.PI);
System.out.println(Math.floor(1.6));
System.out.println(Math.ceil(1.6));
}
}
System.out.println(Math.PI);
- Math 클래스에는 수학과 관련된 여러 변수들과 메소드들이 있다.
- 그중
PI 변수
는 원주율이 적절한 정밀도로 저장되어 있는 변수이다.- 원주율(3.141592...) 이 출력된다.
System.out.println(Math.floor(1.6));
floor 메소드
는 특정 소수점 이하에 대해버림
한 값을 산출한다.- 1.0 이 출력된다.
System.out.println(Math.ceil(1.6));
ceil 메소드
는 특정 소수점 이하에 대해올림
한 값을 산출한다.- 2.0 이 출력된다.
클래스가 위와 같이 다양한 변수와 메소드들을 Math 라는 이름을 붙여 묶어서 정리한 것임을 알 수있다!
인스턴스는 클래스를 컴퓨터 상에서 실체화한 것이다.
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
public class InstanceApp {
public static void main(String[] args) throws IOException{
PrintWriter p1 = new PrintWriter("result1.txt");
p1.write("Hello 1");
p1.close();
PrintWriter p2 = new PrintWriter("result2.txt");
p2.write("Hello 2");
p2.close();
}
}
PrintWriter p1 = new PrintWriter("result1.txt");
- Math 클래스와 달리 PrintWriter 객체는
new 키워드
를 이용해 인스턴스를 생성하여 사용해야 한다.result1.txt
파일에 쓰기가 가능한 PrintWriter 클래스를 실제로 생성하여 이름을p1
으로 만들었다.import java.io.PrintWriter;
- PrintWriter 클래스는
java.io 패키지
에 속해 있기 때문에 이를 사용하기 위해서는 import 구문으로 불러줘야한다.
- PrinterWriter 인스턴스를 생성할 떄는 사용할 파일이 실제로 존재하지 않는다면 오류를 내기 때문에 이에대한 처리를 해주어야 한다.
Add throws declaraton
을 이용해 에러 핸들링을 할 수 있다.
PrintWriter.write("파일 이름", "쓸 내용");
- 만약 인스턴스를 만들지 않고 위와 같이 구현한다면?
- 여러 파일에 반복적으로 여러 내용을 쓰는 상황이라고 가정해보자.
- 이런 경우 파일에 한번 쓰기 작업을 수행할 때마다 일일이 파일의 이름을 입력해 주어야 한다는 단점이 있다.
이처럼 인스턴스는 객체를 다양한 상태에서 사용하고, 기능을 재사용할 경우가 많은 상황에서 유용한 방식이라고 할 수 있다.
Math 클래스
는 자바 API Documentation 를 보면 Constructor 가 없다.(쉽게 일회용이라는 뜻)
PrintWriter 클래스
는 자바 API Documentation 에 Constructor
에 대해 기술되어 있다. 이는 자바 Constructor로 인스턴스를 만드는 것이 허용된다는 뜻.
인스턴스를 생성할 수 있는 클래스는 자바 API Documentation에 Constructor Summary
가 존재한다.
클래스는 서로 계층적인 관계를 갖고 있을 수 있다.
PrintWriter 클래스
의 상속관계를 나타낸 것이다.PrintWriter 클래스
는 Writer 클래스
에서 상속을 받았고, Writer 클래스
는 Object 클래스
에서 상속을 받았음을 알 수 있다.자식
에 해당하는 클래스는 부모
에 해당하는 클래스의 모든 변수와 메소드를 사용할 수 있다.
Open Type hierarchy
를 이용해 클래스의 상속관계를 확인할 수 있다.PrintWriter 클래스
는 Writer 클래스
의 write 메소드
를 사용할 수 있고, Object
의 toString 메소드
를 사용할 수 있다.
- Object 클래스는 모든 클래스의 부모이다.
- 모든 클래스는 Object의 변수와 메소드를 상속받는다.
PrintWriter 클래스
를 다시 확인해보면, Object 클래스
에서 상속받아 다음과 같은 메소드들을 사용할 수 있다는 것을 알 수 있다.부스트코스 쉽게 배우는 자바 1
https://www.boostcourse.org/cs126