[JAVA]맛보기_6

thx4all·2023년 8월 12일

Java

목록 보기
6/8

▶︎[JAVA]맛보기 포스팅는 유튜브 '생활코딩'의 JAVA1 수업을 수강하며 기록했다.

13. 자바 문서 보는 법

13.1. API vs UI

API(Application Programming Interface): 라이브러리 조작 장치, 소프트웨어가 다른 소프트웨어를 사용할 때
UI(User Interface): 프로그램 조작 장치, 일반 사용자가 소프트웨어를 사용할 때

어떤 API가 있고 어떻게 사용하는지 많이 알아내는 것은 좋은 개발자가 되는 초속!

13.2. 패키지, 클래스, 변수, 메소드

[JAVA 공식 사용설명서(api documentation java) 보는 방법]

좌측에는 자바에서 기본적으로 제공하는 패키지 목록클래스 목록이 있다.
우측에서는 클래스에 포함된 변수와 메소드들을 볼 수 있다.
패키지 > 클래스 > 변수, 메소드
(수많은 클래스를 정리하고, 같은 이름의 클래스를 구분하기 위해 패키지가 있다.)

13.3. 클래스

클래스는 서로 연관된 변수와 메소드들을 모은 집합체에 이름을 붙여 놓은 것이다.
코드 작성 시 클래스 이름을 적고 .을 찍으면, 클래스에 소속되어 있는 변수와 메소드의 목록을 보여준다.

클래스를 만드는 법은 몰라도 다른 사람이 만든 클래스를 사용할 줄은 알아야 한다.

13.4. 인스턴스

< 하려고 하는 일 >
'result1.txt' 파일에 "Hello 1"이라는 텍스트를 자바를 통해 작성하기

  • 검색과 질문을 통해 어떤 클래스가 필요한지 알아내기
  • 클래스를 사용하는 예제 찾아내기
  • 그래도 이해가 안되면 API documentation java 를 분석해서 사용법 알아내기
    (오래걸려도 이런식으로 해봐야함)

검색해보니 FileWriter, BufferedWriter, PrintWriter, FileOutputStream, Files 등 클래스들이 나오는데 무슨 차이인지 모르겠지만,,, 일단 지금은 수업을 따라 PrintWriter를 사용하며 '인스턴스'라는 개념에 집중하기로 하자.

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

위 코드에서 new PrintWriter("")PrintWriter의 복제본/아바타(Instance) 같은 것을 만들겠다는 의미이다.
그리고 데이터 타입이 PrintWriter라는 클래스인 p1(변수)에 그 복제본/아바타를 대입한 것이다.
따라서 이제 p1 뒤에 .을 찍으면 PrintWriter에 속한 변수와 메소드 목록이 보인다.

다음 코드는 result.txt 파일에 "Hello 1"이라는 텍스트를 입력한 뒤 파일을 종료하도록 한 것이다.

PrintWriter p1 = new PrintWriter("result1.txt");
p1.write("Hello 1");
p1.close();

이때, PrintWriter라는 클래스에 빨간줄이 떠서 롤업을 해보니, 임포트가 필요한 클래스였다.
import java.io.PrintWriter;를 추가해줬다.
또,
result1.txt에 여전히 빨간줄이 뜨는데, 이 부분에 대해서는 일단 넘어가고 나중에 예외라는 걸 사용하게 될때 확실히 배우자. 일단 수업을 따라 해결했다.

Math와 같은 class는 일회성이라고 생각할 수 있다.
하지만 PrintWriter와 같은 class는 계속해서 이어지는 작업과 연관되어 있어서 일회성이 아니다. (인스턴스 활용 필요)
이 차이는 class 메뉴얼을 확인했을 때 Constructors 라는 것을 찾을 수 있다.
class를 만든 사람이 해당 클래스를 인스턴스로 활용하길 원했다면 Constructors가 있다.

*constructors를 클릭하여 상세 사용법을 확인하면 parameters는 괄호안에 어떤 내용이 들어가야 하는지 설명한 것이고, Throws는 이 클래스를 사용하는 과정에서 생길 수 있는 오류에 대해 알려준 것이다.

예를 들어,

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.write(”result1.txt”, “Hello 1”);
PrintWriter.write(”result2.txt”, “Hello 2”);

두 코드가 같은 기능을 한다고 가정 했을 때, 이러한 과정이 수없이 반복되는 경우 후자는 입력을 할때마다 어떤 파일의 내용을 입력하는 것인지 매번 설정해야 한다.
하지만 전자의 경우 PrintWriter의 인스턴스를 p1이라는 변수의 개념으로 복제하여, 해당 파일의 내용을 입력하거나 수정할 때 더 간단하게 코딩할 수 있는 것이다.

13.5. 상속

자바 사용설명서에서 위 부분처럼 되어있는 부분을 상속관계라고 한다.
'PrintWriter 클래스는 Writer 클래스를 상속받았다.',
'Writer 클래스는 Object 클래스를 상속받았다.' (*java의 모든 클래스는 Object 클래스를 상속받는다)

상속(extends) 받는다는 것은? 부모 클래스가 가지고 있는 메소드, 변수를 그대로 물려받으면서, 원하는 메소드, 변수를 추가한 것

[ 이클립스에서 상속관계 확인하는 방법 ]
PrintWriter 우클릭 - Open Type Hierarchy 클릭하면 클래스의 상속관계를 보여준다.

그리고 각 클래스에 포함된 메소드와 변수 목록도 확인할 수 있다.

자식 클래스에서 정의한 적 없는 메소드를 사용하면 부모 클래스에 메소드가 있는지 찾아보게 되고, 있으면 실행된다.

부모 클래스에 있던 메소드가 자식 클래스에서도 정의되어 있는 경우, 덮어쓰기(override) 된 것이라고 볼 수 있다.
따라서 해당 클래스를 이용해 메소드를 사용했을 때 우선적으로 사용된 클래스에 포함된 메소드를 실행한다.

java에서 제공하는 기본 라이브러리에서는 모든 class가 Object라는 class를 상속받고 있기 때문에, 시간이 된다면 object class가 가진 메소드의 의미/쓰임에 대해 알아보면 좋다.

class 매뉴얼에서 Direct Known Subclasses는 해당 클래스를 상속받은 class 중에 알려진 것들을 표시한 것이다.
또, 매뉴얼에서는 해당 클래스가 상속받은 클래스에 포함되어 있던 변수와 메소드 목록도 확인할 수 있다.


느낀 점

앞으로 이런저런 소스를 따라해보거나 작성해보면서 필요한 클래스나 메소드, 예제를 직접 찾아야 할 일이 점점 많아질텐데 그 때를 위한 최소한의 개념틀을 배운 것 같다.
왜 최소한이라고 생각했냐면,, 연습삼아 검색도 직접 해보면서 수업을 들었는데 누가 정리해놓은 설명이나 예제를 봐도 이해할 수 없는 게 너무 많았다. 그냥 모르는 것들 사이로 흐름 정도만 대충 예측할 수 있을 뿐이었다.
배운게 뭐 있다고 지금 그걸 다 이해하는게 더 이상하지만, 몰라서 뭔갈 검색하면 그 결과에서 또 모르는 게 10개 더 생기고 그걸 알려고 또 찾으면 모르는 게 20개 생기고 한다..
일단 영어공부도 좀 해야할 것 같고, 예제는 간단한 편일텐데 그거라도 이해할 정도는 되어야 하지 않을까 싶다ㅠ 일단 익숙해지자!! 포기하지만 말자!!

profile
세상의 온도를 높일 개발자 도전기

0개의 댓글