본문 바로가기
국비학원/수업기록

국비 지원 개발자 과정_Day10

by 루팽 2022. 12. 9.
String s1 = new String(”안녕”); //s1, s2는 주소번지를 의미
String s2 = new String(”안녕”);
String s3 = “안녕”;
String s4 = “안녕”;

.equlas의 리턴 타입 boolean → if문이나 for문조건식이 써야 함

파라미터는 Object → 원시형타입일땐 .equls사용x

 

s1 == s2는 주소 번지 자체를 비교 → 타입은 같지만 서로 다른 객체이니 false

s1.equlas(s2)는 주소 번지가 가리키는 값이 같은지 비교 → true

s3과 s4는 주소 번지도 문자열도 같음

 

String은 클래스급, 참조형이지만 예외적으로 값을 출력(주소 번지가 있다)

new를 쓰면 주소번지 다름(서로 다른 객체 생성)

안 쓰고 그냥 String은 같음(문자열이 같다면 같은 String객체 공유)

 

package dev_java.ch03;

public class Test1_1 {
  public static void main(String[] args) {
    String str = null;
    if (str.equals("exit")) { // NullPointerException 발생!
      System.out.println("변수가 앞에 위치");
    }
    if ("exit".equals(str)) { // 안터지고 작동함 -> 앞에 상수를 둬야한다
      System.out.println("상수가 앞에 위치");
    }
  }
}

 

package dev_java.ch03;

import java.util.Scanner;

public class Test1_2 {
  public void count() {
    System.out.println("count호출"); // 로그에 출력할 값
    Scanner s = new Scanner(System.in);
    boolean isOk = false;
    while (!isOk) { // !를 붙여서 false인 isOk를 true로 만듦
      System.out.print("문자열을 입력해주세요. : ");
      String str = s.nextLine(); // nextline은 한 줄을 다 읽어옴, next는 공백 전 글자만 읽어옴
      if ("exit".equals(str)) { // 상수를 .equals 앞에둔다!(null값이와도 에러없이 작동하기위해서)
        break; // if문에서 break를 써도 while문 탈출
      } else {
        System.out.println(str.length() + "글자 입니다."); // length()는 문자열 길이를 반환
      }
    } // end of while
    s.close();
    System.out.println("프로그램을 종료합니다.");
  } // end of count

  public static void main(String[] args) {
    Test1_2 t1 = new Test1_2();
    t1.count();
  }
}

 

package dev_java.ch03;

public class Test2 {
  void methodA() {
    int i = 1;
    while (i <= 10) {
      if (i % 3 == 0) {
        System.out.println(i + ": 3의 배수입니다.");
      } else if (i % 3 != 0) {
        System.out.println(i + ": 3의 배수가 아닙니다.");
      }
      i++;
    } // end of while
  } // end of methodA()

  void methodB() {
    for (int i = 1; i <= 10; i++) {
      switch (i % 3) {
        case 0:
          System.out.println(i + ": 3의 배수입니다.");
          break;
        case 1, 2:
          System.out.println(i + ": 3의 배수가 아닙니다.");
          break;
      }
    }
  }

  public static void main(String[] args) {
    Test2 t2 = new Test2();
    t2.methodA();
    System.out.println("==========");
    t2.methodB();
  }
}

 

package dev_java.ch03;

public class Test3 {
  void methodA() {
    System.out.println("methodA 호출 성공");
    int[] arr = { 0, 0, 0, 0 }; // 길이4, 0 0 0 0
    for (int i = 0; i <= arr.length; i++) {
      try {
        arr[i] += (10 + i);
        System.out.println(arr[i]);
      } catch (ArrayIndexOutOfBoundsException e) {
        System.out.println(e.toString()); // index가 4가될 때 try문으로 나와서 출력됨
      } // end of try
    } // end of for
    System.out.println("methodA 종료");
  }

  public static void main(String[] args) {
    Test3 t3 = new Test3();
    t3.methodA();
  }
}

 

 

package dev_java.ch03;

// 2차 배열 -> List<Map<>> 제네릭 -> 웹개발, 앱개발(하이브리드)-JSON
public class TwoArray {
  void toFor(int[][] arr) {
    for (int i = 0; i < arr.length; i++) { // row의 인덱스
      for (int j = 0; j < arr[i].length; j++) { // column의 인덱스
        System.out.println("arr[" + i + "][" + j + "] = " + arr[i][j]);
      } // end of inner for
    } // end of outter for
  }

  void toWhile(int[][] arr) {
    int i = 0;
    while (i < arr.length) {
      int j = 0;
      while (j < arr[i].length) {
        System.out.println("arr[" + i + "][" + j + "] = " + arr[i][j]);
        j++;
      } // end of inner while
      i++;
    } // end of outter while
  }

  public static void main(String[] args) {
    TwoArray ta1 = new TwoArray();
    int arr[][] = new int[2][3];
    ta1.toFor(arr);
    System.out.println("==========");
    ta1.toWhile(arr);
  }
}

// arr[0][0] = 0
// arr[0][1] = 0
// arr[0][2] = 0
// arr[1][0] = 0
// arr[1][1] = 0
// arr[1][2] = 0
// ==========
// arr[0][0] = 0
// arr[0][1] = 0
// arr[0][2] = 0
// arr[1][0] = 0
// arr[1][1] = 0
// arr[1][2] = 0

 

package dev_java.ch03;

public class TwoArray2 {
  public static void main(String[] args) {
    int arr[][] = new int[3][];
    // arr[0] = new int [3];
    arr[0] = new int[] { 1, 2, 3 };
    // arr[1] = new int [3];
    arr[1] = new int[] { 4, 5, 6, 7};
    // arr[2] = new int [3];
    arr[2] = new int[] { 8, 9, 10, 11, 12};

    
    // insert here-5출력
    System.out.println(arr[1][1]);
    // insert here-9출력
    System.out.println(arr[2][2]);
  }
}

 

package dev_java.ch03;

public class TwoArray3 {
  public static void main(String[] args) {
    int arr[][] = new int[3][];
    arr[0] = new int[] { 1, 2, 3 };
    arr[1] = new int[] { 4, 5, 6, 7 };
    arr[2] = new int[] { 8, 9, 10, 11, 12 };
    for (int i = 0; i < arr.length; i++) {
      for (int j = 0; j < arr[i].length; j++) {
        System.out.println("arr[" + i + "][" + j + "]=" + arr[i][j]);
      }
    }
  }
}

// arr[0][0]=1
// arr[0][1]=2
// arr[0][2]=3
// arr[1][0]=4
// arr[1][1]=5
// arr[1][2]=6
// arr[1][3]=7
// arr[2][0]=8
// arr[2][1]=9
// arr[2][2]=10
// arr[2][3]=11
// arr[2][4]=12

 

package dev_java.view;

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class ButtonArray implements ActionListener {
  // 선언부
  JFrame jf = new JFrame(); // setSize(400,300);가로세로 크기지정, setVisible(true);윈도우창에 활성화하기
  JPanel jp_center = new JPanel();
  JTextArea jta_display = new JTextArea(10, 20);
  JScrollPane jsp_display = new JScrollPane(jta_display, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
      JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
  JTextField jtf_input = new JTextField();
  JPanel jp_east = new JPanel();
  JButton jbtn_new = new JButton("새게임");
  JButton jbtn_dap = new JButton("정답");
  JButton jbtn_clear = new JButton("지우기");
  JButton jbtn_exit = new JButton("종료");

  // 생성자
  public ButtonArray() {
    System.out.println("디폴트생성자 호출");
    // 이벤트 소스와 이벤트 처리를 담당하는 핸들러클래스를 매핑하기
    jtf_input.addActionListener(this); // addActionListener를 해줘야 동작을 감지함!
    jbtn_new.addActionListener(this);
    jbtn_dap.addActionListener(this);
    jbtn_clear.addActionListener(this);
    jbtn_exit.addActionListener(this);
    initDisplay();
  }

  // 화면그리기
  public void initDisplay() {
    System.out.println("화면그리기 호출");
    // 윈도우창 오른쪽 상단 X버튼을 누르면 종료 후 가상머신과 연결 끊기
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jp_center.setLayout(new BorderLayout());
    jp_center.add("Center", jsp_display);
    jp_center.add("South", jtf_input);
    jp_east.setLayout(new GridLayout(4, 1, 2, 2));
    jbtn_new.setBackground(new Color(102, 153, 102)); // 배경색
    jbtn_new.setForeground(new Color(255, 255, 255)); // 글자색
    jbtn_dap.setBackground(new Color(102, 153, 102));
    jbtn_dap.setForeground(new Color(255, 255, 255));
    jbtn_clear.setBackground(new Color(102, 153, 102));
    jbtn_clear.setForeground(new Color(255, 255, 255));
    jbtn_exit.setBackground(new Color(102, 153, 102));
    jbtn_exit.setForeground(new Color(255, 255, 255));
    jp_east.add(jbtn_new); // jp_east 패널에 jbtn_new버튼을 붙임!
    jp_east.add(jbtn_dap);
    jp_east.add(jbtn_clear);
    jp_east.add(jbtn_exit);
    jp_center.setBackground(Color.green);
    jf.add("Center", jp_center);
    jf.add("East", jp_east); // 패널을 없애면 거기에 붙인 버튼들도 같이 안보임
    jf.setSize(300, 400);
    jf.setVisible(true);
  }

  // 메인메소드
  public static void main(String[] args) {
    new ButtonArray();
  }

  @Override
  public void actionPerformed(ActionEvent e) { // 콜백메소드
    // e.getSource()는 이벤트가 감지되는 컴포넌트(JTextField)의 주소번지를 반환함
    Object obj = e.getSource();
    // 새게임
    if (jbtn_new == obj) {
      jta_display.append("▷▷▷새게임을 시작합니다.◁◁◁\\n");
    }
    // 정답
    else if (jbtn_dap == obj) {
      jta_display.append("▶▶▶정답은 000입니다.◀◀◀\\n");
    }
    // 화면 지우기
    else if (jbtn_clear == obj) {
      jta_display.setText("");
    }
    // 나가기
    else if (jbtn_exit == obj) {
      // jf.dispose(); // 창 하나씩 따로 닫음
      System.exit(0); // 모든 어플리케이션 닫음
    }
    // 만약 JTextField에서 무언가를 쳤다면
    if (jtf_input == obj) {
      // 사용자가 텍스트필드에 입력한 문자열을 읽어옴
      String input = jtf_input.getText();
      jta_display.append(input + "\n"); //
      jtf_input.setText(""); // input에 입력된 문자열을 지우는 역할
    }
  }
}

 

package dev_java.view.array;

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class ButtonArray_2 implements ActionListener { // 배열을 쓴 경우-직관적이지 않음!
  // 선언부
  AccountSample action = new AccountSample(this); // view에 logic을 가져옴!
  JFrame jf = new JFrame(); // setSize(400,300);가로세로 크기지정, setVisible(true);윈도우창에 활성화하기
  JPanel jp_center = new JPanel();
  JTextArea jta_display = new JTextArea(10, 20);
  JScrollPane jsp_display = new JScrollPane(jta_display, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
      JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
  JTextField jtf_input = new JTextField();
  JPanel jp_east = new JPanel();
  JButton jbtns[] = new JButton[4];
  String jbtn_label[] = { "새게임", "정답", "지우기", "종료" };

  // 생성자
  public ButtonArray_2() {
    System.out.println("디폴트생성자 호출");
    // 이벤트 소스와 이벤트 처리를 담당하는 핸들러클래스를 매핑하기
    jtf_input.addActionListener(this); // addActionListener를 해줘야 동작을 감지함!
    initDisplay();
  }

  // 화면그리기
  public void initDisplay() {
    System.out.println("화면그리기 호출");

    // 윈도우창 오른쪽 상단 X버튼을 누르면 종료 후 가상머신과 연결 끊기
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jp_center.setLayout(new BorderLayout());
    jp_center.add("Center", jsp_display);
    jp_center.add("South", jtf_input);
    jp_east.setLayout(new GridLayout(4, 1, 2, 2));
    for (int i = 0; i < jbtns.length; i++) {
      jbtns[i] = new JButton(jbtn_label[i]);
      jbtns[i].addActionListener(this);
      jp_east.add(jbtns[i]); // 순서중요! setLayout 이후에 와야함
      // jbtns[i].setBackground(new Color(102, 153, 102)); //색이 각각 다르면 이렇게 못씀
      // jbtns[i].setForeground(new Color(255, 255, 255));
    }
    jbtns[0].setBackground(new Color(102, 153, 102)); // jbtn[]선언, 생성보다 뒤에 와야함!
    jbtns[0].setForeground(new Color(255, 255, 255));
    jbtns[1].setBackground(new Color(102, 153, 102));
    jbtns[1].setForeground(new Color(255, 255, 255));
    jbtns[2].setBackground(new Color(102, 153, 102));
    jbtns[2].setForeground(new Color(255, 255, 255));
    jbtns[3].setBackground(new Color(102, 153, 102));
    jbtns[3].setForeground(new Color(255, 255, 255));
    jp_center.setBackground(Color.green);
    jf.add("Center", jp_center);
    jf.add("East", jp_east); // 패널을 없애면 거기에 붙인 버튼들도 같이 안보임
    jf.setSize(300, 400);
    jf.setVisible(true);
  }

  // 메인메소드
  public static void main(String[] args) {
    new ButtonArray_2();
  }

  @Override
  public void actionPerformed(ActionEvent e) { // 콜백메소드
    // e.getSource()는 이벤트가 감지되는 컴포넌트(JTextField)의 주소번지를 반환함
    Object obj = e.getSource();
    // 새게임
    if (jbtns[0] == obj) {
      jta_display.append("▷▷▷새게임을 시작합니다.◁◁◁\\n");
    }
    // 정답
    else if (jbtns[1] == obj) {
      jta_display.append("▶▶▶정답은 000입니다.◀◀◀\\n");
    }
    // 화면 지우기
    else if (jbtns[2] == obj) {
      jta_display.setText("");
    }
    // 나가기
    else if (jbtns[3] == obj) {
      // jf.dispose(); // 창 하나씩 따로 닫음
      System.exit(0); // 모든 어플리케이션 닫음
    }
    // 만약 JTextField에서 무언가를 쳤다면
    else if (jtf_input == obj) {
      // 사용자가 텍스트필드에 입력한 문자열을 읽어옴
      String input = jtf_input.getText();
      // jta_display.append(input + ":" + action.account2() + "\n");
      action.account2();
      jtf_input.setText(""); // input에 입력된 문자열을 지우는 역할
    }
  }
}

 

package dev_java.view.array;

public class AccountSample {
  ButtonArray_2 ba2 = null; // 생성은 x,초기화, 원래 주소번지가 필요한 것

  public AccountSample(ButtonArray_2 ba2) {
    this.ba2 = ba2;
  }

  public String account() {
    return "낮춰라";
  }

  public void account2() {
    String msg = "낮춰라"; // 상수
    // jta_display는 ButtonArray_2에서 생성된 객체인데
    // 굳이 AccountSample
    ba2.jta_display.append(msg + "\n");
  }
}

댓글