DAY_016[국비] 자바 웹프로그래밍 과정

Bona의 블로그 입니다.·2022년 10월 19일
0

국비과정

목록 보기
17/99

 🌞 Day 016 

  • 예외 처리, Swing



 🪐 Collection (2) 

  • HashMap의 constains()hashCode()를 사용한다.

  • hashCode 메서드의 오버라이딩은 정~말 특별한 경우를 제외하고는 권장하지 않는다.

  • 이미 중복값이 발생되지 않도록 철저히 준비된 연산을 다른 연산으로 바꿔서 실행하는 것 자체가 자바의 코딩 규칙을 무너뜨릴 가능성이 있기 때문이다.

  • 다만 오버라이딩이 불가능한 동작이 아니므로 오버라이딩이 가능 하다고 이해하기 위한 예제이다.



 🪐 Exception (예외 처리) 

 💠 예외 처리란? 

  • 에러(Error) : 잘못된 것, 에러가 존재하는 경우 실행될 수 없음

  • 예외(Exception) : 잘못된 것, 특정 상황 또는 조건이 만족되는 경우 프로그램이 종료되는 현상

  • 예외는 다양한 상황에 대해서 발생하는 현상으로 모든 예외를 대처할 수 없다.

  • 다만, 예외 처리는 예외가 발생한 경우 프로그램이 종료되지 않고 사용자에게 선택권 또는 처리기회를 주는 것을 말한다.

  • 즉, 예외처리 ➡ 예외가 발생한 경우 프로그램이 강제 종료되지 않도록 방지하는 것

 ✨ try-catch 

  • 숫자 연산에서 0으로 나누는 연산은 에러가 발생
  • try-catch로 예외 처리 하기
    •  try  
      : 에러발생이 예상되는 곳부터, 에러발생 시 실행이 되면 안되겠다고 생각되는 곳까지 { }로 묶는다.
      try 구문에 있는 명령이라도 에러가 발생한 구문 다음에 위치하는 명령은 실행 되지 않고 바로 catch로 넘어 간다.
    •  catch
      : try 블럭 안에서 에러가 발생하면 해당 에러가 catch()안에 있는 에러의 종류인지 확인 후 종류가 맞으면 catch 블럭 안의 명령 실행
    • 에러의 종류를 모를 때는 최상위 표션인 Exception을 사용하거나,
      Exception과 e.printStackTrace()로 고의 에러를 발생시켜 에러 종류를 알아내서 사용하는 방법이 있다.
    •  Exception
      : (예외)모두를 포함-수용하는 최상위 예외 클래스


 ✨ try-catch 작성 

  •  e.getMessage( ) 
    : 에러 발생시 출력되는 내용 중에서 메시지 부분만 가져오기
    예) /by zero

  •  e.printStackTrace( ) 
    : 에러 내용 전부 출력 (에러 종류, 이유 메시지, 위치 등등)


 ✨ 에러 객체 만들기, 에러 처리 하기 

  • 어떤 명령 그리고 메서드는 에러 발생의 요인을 쉽게 예상할 수 없지만,
    어떤 명령과 메서드는 쉽게 예상이 가능하기도 하다.

  • 그런 상황에서 만들어진 메서드는 위와 같이 예외 처리 요소를 품고 있다가, 사용하게 되면 개발자에게 예외 처리를 권유한다.

  • 권유받은 개발자는 위와 같이 try catch구문을 사용하거나,
    현재 코드를 사용하는 상위 메서드에게 처리를 일임하는 것
    (add throw declaration) 중 하나를 선택하여 처리한다.


 💠 에러 처리 예제 (1) 

  • throw 에러객체;
    '에러를 던진다'고 표현하기도 한다 ➡️ 고의 에러 발생


 💠 에러 처리 예제 (2) 

  • 날짜 입력 에러 처리


 💠 에러 처리 예제 (3) 

  • 숫자 입력 에러 처리
    수업에서는 Integer.parseInt()를 사용했는데 Integer를 사용하고 실수를 입력하면, 실수는 입력되지 않고 에러가 발생했다.

  • Double.parseDouble()을 써보니 정수, 실수 전부 에러 없이 입력되어서 Double.parseDouble을 사용해 작성해보았다.


 💠 에러 처리 예제 (4) 

  • 파일 생성하기



 🪐 Swing 

  • 자바에서 윈도우 GUI에서 사용하는 애플리케이션을 만들 때, 사용하는 클래스이다. 윈도우와 관련된 클래스 대부분이 Swing클래스에 있다고 보면됨

  • 그러나 C#이나 .net이 훨씬 더 좋고 편하기 때문에 (마이크로소프트에서 만든 거니까) 자바로는 잘 만들지 않는다.

 ✨ 윈도우 창 불러보기 


 ✨ 버튼 만들기 

  •  JFrame  : 윈도우 프로그래밍에 필요한 윈도우 구성요소를 보유한 클래스(JFrame)을 상속받아 추가기능 탑재 형식의 개발을 진행한다.

  • 윈도우 최초 화면의 구성은 대부분 생성자 메서드에서 구성한다.

  • JButton 변수명 = new JButton(String);
    생성자에 입력된 텍스트를(소괄호 안의 텍스트) 한가운데 표시한 버튼을 생성한다.
    아직 화면에 버튼이 보이는 상태는 아니고, 생성만 한 상태 (배치X)

  • 버튼 또는 그 외 컨트롤들은 윈도우에 배치되고 위치를 잡아 올라가고, 윈도우가 화면에 보여질 때 같이 표시된다.

  •  JLabel  : 라벨, 이름표, 명찰 등의 역할을 하는 안내 문구 표시용 텍스 도구

  •  Container 
    : 윈도우 위에 생성된 컨트롤객체를 올려놓을 수 있게 해주는 객체.
    싱글톤으로 작성되어있어 new로 새 객체를 생성하지 못하고 getContentPane() 메서드를 사용해야 한다.
    정렬기준도 Container를 사용해서 정한다.

  •  컨테이너 객체.add(컨트롤); 을 사용해서 컨테이너에 생성된 컨트롤들을 순서에 맞춰 올려 놓으년 화면에 표시될 준비 완료된다. (작성 순서대로 올라감)

  •  컨테이너객체.setLayout(FlowLayout()); 
    : 컨테이너에 올라간 컨트롤들을 정렬시키는 메서드, 정해주지 않으면 작성 순서대로 겹쳐져서 마지막 컨트롤만 보이게 된다.
    정렬하는 법은 소괄호에 넣는데 자세한 내용은 아래 예제들로 하나씩 나옴

  •  FlowLayout() 
    : 컨테이너에 올라가는 순서대로 일직선상에 위치시키는 레이아웃

  • 윈도우 세팅

    •  setTitle("윈도우 타이틀"); 
      : 윈도우 좌착 상단에 표시된 타이틀 내용 설정

    •  setSize(300,200); 
      : 윈도우 크기 설정, 단위(픽셀)

    •  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      : 현재 윈도우 종료시 프로그램까지 종료

    •  setVisible(true); 
      : 화면에 윈도우 출현시키는 메서드, 실행시키면 창이 바로 켜지게


 ✨ 버튼 객체 테스트 


 ✨ ActionListener 

  • ActionListenr
    : 인터페이스, implements로 구현해서 사용한다.
    반드시 오버라이딩할 메서드 actionPerformed()가 존재한다.
    JS에서의 이벤트리스너와 비슷하다.

  • 사용 순서

    1. ActionListener를 implements 한다.

    2. 적용할 컨트롤에 addActionListner 메서드로 감시설정을 한다.

    3. 해당 컨트롤에 이벤트가 발생하면 호출된 ActionPerformed 메서드를 오버라이드 한다.

  • e.getActionCommand();
    : 이벤트가 발생한 객체(e), 컨트롤의 표시된 값을 리턴


 ✨ JButton에 이미지 넣기 

  • 이미지파일을 불러와서 자바 Swing화면에 표시하려면, 이미지파일을 아이콘 형태로 변환하여 사용해야 한다.

  • ImageIcon 사용하기
    : ImageIcon 객체명 = new ImageIcon("images/파일이름.확장자");
    images 폴더는 src와 "같은 폴더"에 있어야 한다!! (즉, src 밖에!!!)


 ✨ 버튼 자체 이벤트 처리 실습 

  • JButton 자체 이벤트도 있다.

 ✨ Layout - FlowLayout.RIGHT/LEFT 

  • 컨테이너에 올라간 컨트롤들을 정렬시키는 레이아웃들


 ✨ Layout - BorderLayout 

  • 화면을 동-서-남-북-중앙으로 나눠서 배치하는 레이아웃
    CENTER는 정의 하지 않으면 자리가 남아있지만 이외의 영역은 정의하지 않으면 다른 영역이 그 자리를 차지한다.

 ✨ Layout - GridLayout 

  • 화면의 배치를 행과 열의 개수로 배치하고 조절
    (행, 열, 가로간격, 세로간격), 간격의 단위(픽셀)

 💠 그리드레이아웃 연습 : 과일 선택하기 

  • 이미지
    : apple.jpg / persimmon.jpg / pear.jpg / banan.jpg / cherry.jpg

  • 다섯 개의 이미지를 아이콘으로 만들고, 버튼 다섯 개를 이미지와 함께 생성하기

  • 그리드 레이아웃을 이용하여 3행 2열로 배치하고,
    액션 리스너를 붙여서 버튼 클릭 시에 이미지에 해당하는 과일 이름이 result 라벨이 나오도록 작성


 ✨ JTextField 

  • 라벨이 화면에 메시지는 표시하지만 수정은 할 수 없는 안내문구만 가능하다면,

  • 텍스트 필드는 피어있는 곳에 글자를 써 넣는 것이 가능하고, 쓰여진 글자들을 수정할 수도 있다.

  • 텍스트필드객체.getText();
    : 텍스트필드에 쓰여진 String을 가져오는 메서드


 💠 텍스트 필드 연습 

  • 윈도우에 텍스트 필드1, 버튼1, 버튼2, 텍스트필드2 순서로 표시

  • 버튼1 표면에는 ">" 글자표시, 버튼2의 표면에는 "<"글자를 표시

  • 버튼1을 클릭하면 텍스트필드1의 글자가 텍스트필드2로 옮겨지게 하고,
    버튼2을 클릭하면 텍스트필드2의 글자가 텍스트필드1로 옮겨지게 할 것

  • 글자가 없는 상태에서 버튼을 클릭하면 아무 일도 일어나지 않게 하기

  • 윈도우 클래스 이름은 TextFieldEx로, 윈도우 가로 세로 크기는 적절히 조절

  • 수업이 거의 끝날 때쯤 문제를 받아서 수업 끝날 때까지 작성했음..
    집에와서 actionPerformed()를 조금 수정했는데 실행은 되는 듯한데
    잘 했는지 모르겠다.

  • 어쨌든 혼자 적어보았고 내일 수업을 들으면서 수정할 것이 있으면 수정하고 공부할 것!!



profile
제가 공부하고 공유하고 싶은 글을 올리고 있습니다.

0개의 댓글