본문 바로가기
학원수업/12월

12/08 국비학원 자바수업 9회차(배열, UI API)

by 코딩마스터^^ 2022. 12. 8.

빈번한 배열의 오류

아마 여러분이 자바 코드를 작성하면서 보게 될 가장 많은 오류중의 하나는 바로 다음의 오류일 것이다.

ArrayIndexOutOfBoundsException

다음의 예처럼 요일 배열의 길이는 총 7개인데 만약 8번째 값을 얻으려고 시도하면 이와 같은 오류가 발생한다.

System.out.println(weeks[7]);  // 8번째 배열값이 없으므로 ArrayIndexOutOfBoundsException 오류가 발생한다.

https://wikidocs.net/206

 

03-06 배열 (Array)

지금까지 우리는 숫자와 문자열에 대해서 알아보았다. 하지만 이러한 것들로 프로그래밍을 하기엔 부족한 점이 많다. 예를 들어 1부터 10까지의 숫자들 중 홀수들의 모임인 1, 3,…

wikidocs.net

 

조건문이나 실행문은 선언부에 올수 없다!!!

package dev_java.assignmentTest;

public class Test1_2 {
  int i=1;
 while(i<=20){
    if(i%5==0){
      System.out.println(i + ": 5의 배수입니다.");
    }else {
      System.out.println(i + ": 5의 배수가 아닙니다.");
    }
    i++;
  }

클래스 밑에 : 선언부 - 전역변수 선언한다

바로 조건문 실행문이 올수없다. 메소드에 넣어줘야 한다.

 

UI API를 사용하여 화면구현하기

  //1. UI API를 사용하여 공부를 하면
  //2. 초기화를 활용할 수 있게 됨
  //3. 사용자 정의 메소드를 많이 만들어 볼 수 있음
  //4. 파라미터와 리턴타입에 대해 확실해짐
  //5. 전역변수와 지역변수를 구분하여 코딩을 전개하게됨
  //6. 클래스를 나누는 조건을 갖게됨
  //7. 이벤트 처리응 사전학습 할 수 있음
  //8. 익명 클래스를 활용할 수 있음-익명함수,arrow funion 등 신 문법을 공부하는데에 도움됨

데이터 클래스

데이터 클래스의 특징! 전역변수이다.

VO

DTO(data transfer object)

선택지가 2개이다. 읽기 or 쓰기

가장 간단한 구조의 클래스

package dev_java.ch01;

//자료구조의 일부로 사용함
//회원정보를 관리하기위한 목적으로 설계하였다. 그래서 메인메소드는 필요없다
public class MemberVO {
  private String mem_id = null;
  private String mem_pw = null;
  private String mem_name = null;

JButton-api검색

 

ConstructorsConstructor and Description

JButton()
Creates a button with no set text or icon.
JButton(Action a)
Creates a button where properties are taken from the Action supplied.
JButton(Icon icon)
Creates a button with an icon.
JButton(String text)
Creates a button with text.
JButton(String text, Icon icon)
Creates a button with initial text and an icon.

메세지 오버로딩

중복정의하는데있어서 지켜줘야되는 규칙

타입 다르거나 이름이 달라야한다.

 

디스플레이 창이 생겼다.

package dev_java.view;

import javax.swing.JButton;
import javax.swing.JFrame;

public class RandomGameView {
  
  //선언부
  // JFrame jf = null;//게으른 인스턴스화
  JFrame jf=new JFrame();//이른 인스턴스화
  JButton jbtn_north= new JButton("북쪽");//생성자 파라미터는 string
  JButton jbtn_south= new JButton("남쪽");
  JButton jbtn_east= new JButton("동쪽");
  JButton jbtn_west= new JButton("서쪽");
  JButton jbtn_center= new JButton("중앙");
  //생성자
  public RandomGameView(){
    System.out.println("디폴트 생성자 호출");
    initDisplay();
  }

  //화면처리부
  public void initDisplay(){
    System.out.println("initDisplay 호출");
    jf.add("North",jbtn_north);
    jf.add("South",jbtn_south);
    jf.add("East",jbtn_east);
    jf.add("West",jbtn_west);
    jf.add("Center",jbtn_center);
    jf.setSize(300,400);
    jf.setVisible(true);
  }
  //1. UI API를 사용하여 공부를 하면 
  //2. 초기화를 활용할 수 있게 됨
  //3. 사용자 정의 메소드를 많이 만들어 볼 수 있음
  //4. 파라미터와 리턴타입에 대해 확실해짐
  //5. 전역변수와 지역변수를 구분하여 코딩을 전개하게됨
  //6. 클래스를 나누는 조건을 갖게됨
  //7. 이벤트 처리응 사전학습 할 수 있음
  //8. 익명 클래스를 활용할 수 있음-익명함수,arrow funion 등 신 문법을 공부하는데에 도움됨

  //메인메소드
  public static void main(String[] args) {
    new RandomGameView();
    //선언부 없이 생성자만 호출 할 수 있다. 인스턴스 변수를 재사용할 일이 없다면 괜찮아
    // new RandomGameView(); 복제본이 생성됨. 그러나ㅣ 다른 객체임
    // new RandomGameView();마찬가지 동일타입 그러나 다른 객체?
  }
  
}

 

선언부 없이 생성자 호출하기

new RandomGameView();
    //선언부 없이 생성자만 호출 할 수 있다. 인스턴스 변수를 재사용할 일이 없다면 괜찮아

버튼을 누르면 일어나는 일

ID -------- --로그인-----   버튼을 누른다->버튼이 안다->이벤트소스=JButton-->JVM이 담당함

PW

 

user

kenal(운영체제)

하드웨어

 

기본적으로 상속.

상속은 결합도가 높다.

추상 메소드

선언만 되어있다.

 

자동차가 스탑이없다..?

자동차라면 스탑 메소드가 있어야만 한다.

 

이런것들을 추상메소드라고 한다.

ActionListener

actionPerformed 메소드를 가진다.

이 메소드가 메소드 오버라이드

상속을 받았다.

단독으로는 인스턴스화를 할 수 없다.

구현체 클래스가 있어야만 한다. 추상 메소드는 단독으로 기능을 못하기 때문이다.

Event Handler Class

콜백함수는 소프트웨어가 감지되었을때 스스로 호출한다. 메인클래스처럼.

모든 프로그램 언어는 콜백함수 다 가지고 있다.

이벤트 소스가 이벤트 대상이고 이벤트가 감지됐을때 액션퍼폼드 호출이 일어난다.

 

이벤트 처리 루틴

 

1. 이벤트 소스를 지원하는 이벤트 처리 리스너를 선택한다.

JButton, JTextField(엔터치면)->ActionListener{}

클래스 A는 이벤트 핸들러 클래스이다.

ActionListener의 구현체 클래스이다.

ActionListener에 정의된 추상메소드 actionPerfored를 오버라이딩 해야함-강제사항-명세서

 

2. 오버라이딩 해야 한다.-재정의

예를 들어, 버튼을 눌렀을때 소리가 1씩 커질건지 5씩 커질건지 정도를 정하는 것이다.

 

3. 이벤트 소스와 이벤트 핸들러 클래스를 연결-callback이 일어남.

 

오버라이딩

자바에서 메소드 오버라이딩이란, 상속의 관계에 있는 클래스 간에 하위 클래스가 상위 클래스와 '완전 동일한 메소드'를 덮어쓴다는 의미이다. 여기서 '완전 동일한 메소드'라는 말은 이름과 반환형이 같으면서 매개변수의 개수와 타입까지 모두 같은 메소드라는 의미이다. 즉, 오버로딩(overload)되지 않는 (JVM이 단순히 다른 메소드라고 구별을 할 수 없는) 메소드이다.

 

스크롤 화면 만들기

package dev_java.view;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

//한 클래스에서 만드는게 아니고 로직따라 분리하기로했다. 
public class RandomGameView implements ActionListener {
  JFrame jf=new JFrame();//이른 인스턴스화

  JTextField jtf_input= new JTextField(5);//생성자  파라미터는 int
  
  JTextArea jta_display= new JTextArea(10,20);//생성자파라미터는 int
  JScrollPane jsp_display=new JScrollPane(jta_display,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);//스크롤바 만들기
  public RandomGameView(){
    System.out.println("디폴트 생성자 호출");
    initDisplay();
  }

  //화면처리부
  public void initDisplay(){
    System.out.println("initDisplay 호출");
    jtf_input.requestFocus();
    jtf_input.addActionListener(this);
    jta_display.setEditable(false);
    jf.add("South",jtf_input);
    
    jf.add("Center",jsp_display);//스크롤이 화면을 갖고있으니까
    jf.setSize(300,400);
    jf.setVisible(true);
  }
  //1. UI API를 사용하여 공부를 하면 
  //2. 초기화를 활용할 수 있게 됨
  //3. 사용자 정의 메소드를 많이 만들어 볼 수 있음
  //4. 파라미터와 리턴타입에 대해 확실해짐
  //5. 전역변수와 지역변수를 구분하여 코딩을 전개하게됨
  //6. 클래스를 나누는 조건을 갖게됨
  //7. 이벤트 처리응 사전학습 할 수 있음
  //8. 익명 클래스를 활용할 수 있음-익명함수,arrow funion 등 신 문법을 공부하는데에 도움됨

  //메인메소드
  public static void main(String[] args) {
    new RandomGameView();
    //선언부 없이 생성자만 호출 할 수 있다. 인스턴스 변수를 재사용할 일이 없다면 괜찮아
    // new RandomGameView(); 복제본이 생성됨. 그러나 다른 객체임
    // new RandomGameView();마찬가지 동일타입 그러나 다른 객체?
  }

    @Override//화면상에 보여줄려고 하는것
    public void actionPerformed(ActionEvent e){
      //엔터의 주소번지를 가져온다
      Object obj = e.getSource();
      System.out.println(e.getSource());//주소번지
      if(jtf_input==obj){
        System.out.println("사용자가 입력한 값은 jtf_input.getText()");
        jta_display.append(jtf_input.getText()+"\n");//개행처리
        jtf_input.setText("");//지우기는 ""로 대체함
      }
    }
}

 

 

TestArea는 아이콘은 올수없다.

야구게임 시각화

 

뷰-------로직

연결하기

static으로 하지말기

생성자로 해결을 하자

 

댓글