Swing과의 첫 만남 🙈

샨티(shanti)·2022년 5월 29일
0

TIL

목록 보기
134/145
post-thumbnail

메가테라는 매 주 금요일 오후 6시에 주말동안 들어야 할 아샬님의 강의를 오픈합니다.
주말 내도록 강의를 충분히 듣고, 필기&질문 목록을 만들고 난 뒤에
이어지는 월~금요일동안 주어진 과제를 수행하는 플립드 러닝(flipped learning) 방법으로 공부합니다.


와우... 솔직히 3주차 강의가 정말 어려운 건줄 알았는데. 웬걸?
4주차 강의? 머선일이고?
난이도가 갑자기 극상으로 치솟은 바람에 외계어 속에서 허덕이다가 이대론 안되겠다 싶어 우선 잠시 잠깐 강의를 내려놓고 생각을 정리해본다.

그래. 우리가 실생활에서 사용하는 많은 서비스(application 등)에서는 그저 더하기, 빼기, 또는 Hello, World! 문장을 표시하는데 그치지 않는다.
나의 작고 소중한 돈(ㅋㅋ)을 송금하거나 또는 계좌로 받기도 하며, 암호화된 정보를 주고받으며 결제를 하거나 물건을 구입하기도 한다.
이뿐인가? 화려하고 세상 정신없는(;;) 스킬들을 사용하는 게임들도 많이 있고...
가히 모두 짐작할 수도 없을 만큼 다양하면서도 복잡한 서비스들이 지금도 제공되고 있고, 또 어느 누군가의 손에서 만들어지고 있다.

그러니 이번 강의도... 완벽히 소화한다면 그렇게 극상의 난이도는 아닐 것임을!!! 다시한번 기억하면서!!
어차피 나는 쪼렙이니 차근 차근 좋은 프로세스를 밟아나가는 데 무게를 싣자.

좋은 습관, 좋은 프로세스를 거치는 경험, 좋은 애티튜드를 갖지 못한다면 이를 되돌리는 데 드는 비용과 시간, 에너지는 실로 엄청날 것이다.
어쩌면 되돌릴 수 없을지도... ㅠㅠ.




스윙(Swing)이라는 게 있대요.

강의를 몇 번 들어놓고도... 스윙이라는 게 '있대요'라니 ㅎㅎㅎㅎㅎ
그만큼 나에게 아직 거리감이 느껴지는 Swing이라는 존재. 사실은 Java랑도 친해지려면 갈길이 구만리라... Swing이라는 다소 낯선 존재가 나타난 것이 부담스럽기도 하다.

하지만 한편으론.
코드를 입력하고 터미널로 확인하고, 또 입력한 뒤에 터미널에 나오는 텍스트 결과값을 확인하고...
다소 지루한(?) 과정의 반복이었는데 Swing을 통해서 우리에게 좀 더 익숙한 형식으로 결과값을 보니 그 부분은 신기하게 느껴졌다.

방금 이야기한 부분에서 힌트를 얻었겠지만 Swing은 자바에서 GUI를 구현하기 위해 JDK에서 기본적으로 제공하는 개발 툴킷이다.

GUI와 CUI ㅎㅎ 아주아주 오래전에 학교 컴퓨터 시간에 배웠던 개념인 것 같다.

  • GUI(Graphical User Interface)
    그래픽 사용자 인터페이스. 사용자가 편리하게 사용할 수 있도록 입출력 등의 기능을 아이콘과 같은 그래픽으로 표현

  • CUI(Character User Interface)
    명령줄 인터페이스(CLI; Command-Lin Interface)라고도 불림. 명령어를 통해서 컴퓨터와 소통

대부분의 일반 사용자들이 도스(요즘은 거의 없을..), 리눅스 등의 CUI 기반 운영체제를 어려워 하는 이유는 GUI에 익숙해져있기 때문 아닐까?
나 역시도 이제 JAVA를 3주동안 배운 쪼렙(ㅎㅎ)이라 CUI 기반의 운영체제나 프로그램이 익숙하지 않다. 그만큼 우리는 모든 실생활에서 GUI 기반으로 컴퓨터나 각종 디바이스와 소통하고 있다는 의미.

Swing은 CUI(또는 CLI) 기반의 JAVA 에서 GUI를 구현할 수 있도록 여러가지 기능이 포함된 툴킷인 것이다.

메가테라 4주차 강의를 듣고 코드를 입력하여 실행시킨 모습

뭔가 검은 바탕에 끊임없이 글씨들만 나열되다가, 익숙한 백색 화면 창이 뜨고 내가 입력한 Hello, World!가 창 위에 출력되어 있는 걸 보니 감회도 새로왔고 신기했다.
아 내가 이런 모양의 프로그램을 나중에 만들 수도 있겠구나 하는 생각도 들었다.

그럼 이 Swing은 어떻게 사용하는 것이지?
Swing이라는 프로그램이 따로 있는 것은 아니고...
우리가 인텔리제이 첫 화면에 코드를 작성해나가는 것과 동일하게 인텔리제이 화면에서 코드를 작성한다.

다만 Swing은 버튼, 창 크기, 창 크기 조절여부, 입력할 텍스트와 배치할 위치 등 다양한 사항들을 정해줄 수 있기 때문에 기존에 좀 익숙해졌던 코드의 모습들과는 또다른 모습을 지녔다. (사실 자바도 그리 익숙하진 않았..으....)

그럼 지금부터는 강의에서 자주 사용되었던 Swing 관련 개념중에서도 JFrame에 대해 알아보자.




JFrame이라는 것도 있어요.

오라클 공식 튜토리얼에서 JFrame을 살펴보면 JFrame이 '클래스'라는 점을 알 수 있다.
나는 아직 클래스의 개념이 명확하지 않기 때문에... 뭐라고 설명하기는 좀 어렵지만, 이럴 때에는 자주 사용되는 형태를 외워버리고 그 이후에 이해할 수 있는 시점이 오면 이해하기로 다짐(?ㅎㅎ) 했다.

JFrame은 말 그대로 '프레임'. 앞에 J가 붙은 건 JAVA(Swing)을 표현하는 접두어이므로 크게 의미를 가지지 않고 뒤에 따라오는 낱말에 집중해보자.

비슷한 예시로 JButton, JTextField가 있겠다. (JButton은 버튼과 관련된 무언가일 것이고, JTextField는 문자를 입력하는 필드와 관련된 무언가일 것이라고 추측할 수 있겠다.)

JFrame의 가장 큰 역할이라 하면 우리에게 익숙한!! 윈도우 창을 띄우는 것. 아까 위에서 캡쳐해왔던 창을 띄우려면 가장 먼저 해주어야 할 일이 바로 JFrame을 활용하는 것이다.

마치 JAVA의 boilerplate마냥 기본처럼 사용되는 코드들이 있는데 아래 내용을 참고해보자.


import javax.swing.*;

public class HelloWorld {
    public static void main(String[] args) {
        // 1. JFrame란 도구를 가져다가 만들어서 쓰기
      	JFrame frame = new JFrame("Hello, World!");
          	
        // 2. 창을 끄면(X 누르기) 실행도 종료시키기
      	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // 3. 창 크기 설정하기 
        frame.setSize(400, 300);

        // 4. 창 보여주기
        frame.setVisible(true);
    }
}

  1. JFrame frame = new JFrame();
    Scanner scanner = new Scanner(System.in);과 굉장히 유사한 형태이다.
    누군가가 만들어 놓은 Library를 가져다가 사용하는 것.
    위 본문에는 JFrame frame = new JFrame("Hellow, World!"); 라고 들어가있는데, 우측편 괄호 안에 들어간 문자열이 윈도우 화면 상 어디에 출력되는지 확인해보자.

아무것도 없는 창이 뜨고 그 윈도우 창 상단(마치 탭의 이름같은)에 내가 입력한 값이 나타난다.

  1. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    만약 이 명령어가 없는 상태라면, 띄워져 있는 창을 끄고 나서도 터미널에서는 프로그램 실행 종료가 되지 않기 때문에 강제로 종료하는 방법(ctrl + C)을 사용하여 탈출해야 한다.
    요 내용을 입력해주면 위에 있는 화면의 빨간색 버튼(창 종료)을 누름과 동시에 인텔리제이 터미널에서도 프로그램 실행이 종료된다.

  2. frame.setSize(400, 300);
    대체로 이런 이름들을 잘 살펴보면 무슨 역할을 하는 명령어들인지 눈치챌 수 있다. 아마 우리가 변수명에 대해서 깊이 고민해봐야 하는 이유와 같은 맥락 아닐까?
    size를 set하는 명령어. 괄호 안에 (가로, 세로) 픽셀을 입력해주면 이에 해당하는 크기의 창이 뜬다.
    창의 크기를 제작자가 직접 설정해주어도 되지만, 그게 아니라 컴퓨터에서 알아서 fit하게, 즉 윈도우 창 내부에 있는 요소들을 고려하여 fit한 사이즈로 만들 것을 원한다면 위 명령어는 지우고, 가장 하단에 들어갈 frame.setVisible(true); 명령어 직전 라인에 frame.pack()을 입력해주면 된다.

  3. frame.setVisible(true);
    이것 역시 명령어 단어를 통해 결과를 유추해볼 수 있음. visible, 즉 시각적으로 보일 수 있도록 showing하는 것을 의미하는데 괄호 안에는 boolean 식이 들어간다. 예시처럼 true를 입력할 경우, frame을 showing 해주고, false일 경우 창을 띄우지 않는다.


처음 보는 것들이 많아 당황했지만, 차근 차근 단어가 내포한 의미를 생각하면서 작성해보니 좀 낫다.

사실 JFrame 뿐만 아니라 JLabel, JTextField, JButton 등 다양한 컨트롤들이 있는데... 조금 더 숙련도를 키우고!! 난이도를 높여서!! 사용해보는 연습을 해야 겠다.

아직은 너무나 어려운 Swing....
이번 4주차를 시작하기 전부터 한숨이 푹푹 나오지만~
그래도 끝까지 잘 마무리 하고, 트레이너분들의 조언을 믿고 따라가자.

이번주도 화이팅!


profile
가벼운 사진, 그렇지 못한 글

0개의 댓글