이것저것 공부기록

[부스트코스] 자바 API와 클래스, 인스턴스, 패키지, 상속 본문

부스트코스 서포터즈 3기

[부스트코스] 자바 API와 클래스, 인스턴스, 패키지, 상속

채도리 2021. 1. 25. 11:59

*부스트코스 <쉽게 배우는 자바1> 강의를 통해 학습한 내용+개인적으로 공부한 내용을 바탕으로 작성한 글입니다.

UI

UI(User Interface, 사용자 인터페이스)는 사람들이 컴퓨터와 상호 작용할 수 있도록 만들어진 매개체이다.  따라서 UI는 사용자와 사용자가 다룰 대상(하드웨어, 소프트웨어 요소)을 연결해주는 것이라고 할 수 있다. 예를 들면 스마트폰의 키보드, 음성인식 기능, 웹사이트의 로그인 버튼 등이 있다. 

API

UI가 사용자와 프로그램을 연결하는 것이라면, API(Application Programming Interface)는 프로그램과 또 다른 프로그램을 연결하는 것이라고 볼 수 있다.

 

출처: 쉽게 배우는 자바1 Ch.13-1 자바 문서 보는 법 - API vs UI

 

위 그림을 보면, 컴퓨터 운영체제 위에 자바가 설치되어 있고, 설치된 자바의 라이브러리에는 보이는 것과 같이 System, Date, Math 등 다양한 도구들이 있다. 

 

우리가 자바 프로그램을 만들 때는, 자바의 도구들을 응용(Application)해서 우리가 원하는 작업을 시간적 순서(Program)에 따라 동작하도록 만든다. 

 

자바의 도구들을 응용할 수 있도록 일정한 조작 장치를 구성한 것, 즉 자바 시스템을 제어하기 위해서 자바에서 제공하는 명령어들을 API라고 한다. (ex. 자바 기본 패키지의 클래스들)

 

자바 개발자는 자바에서 제공한 API를 이용해서 자바 프로그램을 만들게 되는 것이다.

 

자바 프로그램은 또 다른 프로그램에서 사용될 수 있고, 그 사이를 매개해주는 것 역시 API이다.

 

API와 UI 모두 Interface(서로 다른 두 물체 사이에서 상호 간 대화하는 방법)라는 점을 기억해두면 될 것 같다.

 

API 문서

자바 프로그램을 만들기 위해서는 자바의 도구들을 사용할 수 있게 만든 장치인 API를 사용하게 되는데, Java API documentation에서 어떤 API가 있는지, 어떻게 사용하는지 알 수 있다.

 

 

Java API documentation 페이지를 열어보면 위와 같다.

 

왼쪽 상단에는 패키지들에 대한 정보를, 왼쪽 하단에는 클래스들에 대한 정보를 담고 있다.

패키지를 선택하면 해당 패키지에 포함된 클래스들만 보여준다.

 

 

Math 클래스 페이지인데, Math 클래스는 java.lang 패키지에 속해 있음을 알 수 있다.

(java의 최상단 패키지는 java.lang이다.)

 

 

스크롤해서 내려보면 변수(Variable/Field)와 메소드(Method)들의 정보도 볼 수 있다.

 

클래스(Class)

클래스는 연관되어 있는 변수와 메소드의 집합이다.

클래스를 만든다는 것은 사용자 정의 데이터 타입을 만드는 것과 같은 의미이다. (사용자가 원하는 변수와 메소드를 직접 생성해서 사용할 수 있으므로)

public class ClassApp {
	public static void main(String[] args) {
		System.out.println(Math.PI);          // 3.141592653589793
		System.out.println(Math.floor(1.6));  // 1.0
		System.out.println(Math.ceil(1.6));   // 2.0
		System.out.println(Math.abs(-6.8));   // 6.8
	}
}

Math 클래스에는 수학과 관련된 여러 변수들과 메소드가 있다. (Math 클래스는 기본적으로 내장되어 있음)

PI 변수는 원주율을 저장하고 있는 변수이고, floor 메소드는 소수점 버림, ceil 메소드는 소수점 올림, abs 메소드는 절댓값을 출력한다.

 

인스턴스(Instance)

인스턴스는 클래스를 컴퓨터 상에서 실체화한 것이다.

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();
	}
}

코드를 작성하고 실행하면, result1.txt 파일이 생성되고 생성된 파일에 "Hello 1"이 입력되어 있다.

 

 

앞서 Math 클래스를 사용했을 때와 달리 PrintWriter 객체는 new 키워드를 통해 인스턴스를 생성하여 사용한다.

PrintWriter p1 = new PrintWriter("result1.txt");

 

흔히 클래스는 붕어빵 틀, 인스턴스는 붕어빵이라고 비유하기도 한다.

클래스는 인스턴스를 만들어내기 위해 정의된 설계도, 로써 변수(상태)와 메소드(행동)를 포함하고 있다. 그리고 이 클래스의 모양 그대로 실체화된 것이 인스턴스이고, 인스턴스는 실제로 메모리에 생성된다.

 

** 인스턴스를 만들어 사용하는 이유 → 재활용성을 높이기 위해서 (하나의 클래스로 여러 개의 인스턴스를 만들어 사용할 수 있다.)

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라는 클래스를 통해 p2라는 인스턴스를 또 만들어 사용할 수 있고, 이러한 점을 재활용성이라고 할 수 있다.

 

* 인스턴스를 생성할 수 있는 클래스는 자바 API Documentation에 Constructor Summary (생성자)가 존재한다.

 

패키지(Package)

패키지는 연관있는 클래스들의 집합으로, 컴퓨터의 폴더, 디렉토리와 유사한 개념이다.

하나의 클래스 안에서 같은 이름의 클래스들을 사용하기 위한 방법이기도 하다.

 

상속(Inheritance)

클래스들은 계층적인 구조를 이룰 수 있다.

 

 

위에서 사용했던 PrintWriter 클래스를 API Documentation에서 찾아보면, 각각의 클래스 간의 상속 관계를 알 수 있다.

빨간색 박스 부분에서 PrintWriter 클래스는 Writer 클래스로부터 상속을 받았고, Writer 클래스는 Object 클래스로부터 상속을 받았다는 것을 뜻한다.

 

* 이클립스에서는 Open Type Hierarchy(F4)에서 확인 가능

 

 

이때 상속을 받는 클래스를 자식 클래스, 상속을 해주는 클래스를 부모 클래스라고 부른다.

자식 클래스 부모 클래스를 확장해서 만들어진 클래스이며(변수, 메소드 추가 가능), 부모 클래스의 모든 변수와 메소드를 사용할 수 있다. 따라서 상속을 통해 불필요한 코드의 재사용을 줄일 수 있다.

 

* Object 클래스는 모든 클래스의 부모 클래스로, 모든 클래스는 Object 클래스의 변수와 메소드를 상속받는다.

 

 

<references>

API란? - dydrlaks.medium.com/api-%EB%9E%80-c0fd6222d34c

Java - API와 API 문서 보는 법 - velog.io/@leyuri/Java-API%EC%99%80-API-%EB%AC%B8%EC%84%9C-%EB%B3%B4%EB%8A%94-%EB%B2%95

생활코딩 자바 - opentutorials.org/course/1223

 


 

 

<Java 프로그래밍 시작하기> 단원까지 모두 마쳤다. 61개의 강의 중 46개를 들었고, 15개의 강의가 남았다.

생각보다 강의를 빠르게 듣게 되었는데, 이미 다른 프로그래밍 언어를 배워본 경험이 있기에 금방금방 넘어갈 수 있었던 것 같다. 요즘 들어 살짝 해이해진 감이 없지 않은데, 1월 안으로 이 강의를 마치는 것이 목표이다.

 

강의 초반에 필수적인 것들만 강의하신다고 하셨는데, 그래서 그런지 많은 내용들이 생략되어 있다는 생각이 들기도 하지만, 개념적인 부분은 충분히 이해가 가게끔 설명해 주셔서 비전공자 분들이 듣기에 어려운 느낌 없이 쉽게 프로그래밍에 입문할 수 있는 강의라는 생각이 들었다. 

 

 

다 함께 배우고 성장하는 부스트코스

부스트코스(boostcourse)는 모두 함께 배우고 성장하는 비영리 SW 온라인 플랫폼입니다.

www.boostcourse.org