chapter03,4 복습 순서 |
메모 | |
ch10> StringTest1 StringTest2 StringBuilderTest ch11> ObjectTest MainTest1 Book |
chapter04 ch01> FlowLayoutEx BorderLayoutEx GridLayoutEx NoLayoutEx ch02> MyComponents MainTest1 |
String 선언방식
package ch10;
public class StringTest1 {
//main function _ start of code
public static void main(String[] args) {
//String 선언 방식
//heap 메모리에 인스턴스로 생성되는 경우
String str1 = new String("abc");
//data, static, constant pool에 위치한다.
String str2 = "abc";
String str3 = "abc";
System.out.println(str1 == str2);
System.out.println("----------");
System.out.println(str2 == str3);
String str4 = new String("abc");
String str5 = new String("abc");
System.out.println("----------");
System.out.println(str4 == str5);
String str6 = "abc";
String str7 = "abc";
System.out.println("----------");
System.out.println(str6 == str7);
//결론 : 힙 메모리는 생성될 때 마다 다른 주소값을 가지지만,
// 상수 풀에 생성된 문자열은 모두 같은 주소값을 가진다.(같은 문자열일 경우)
}//end of main
}//end of class
String 새 문자열 생성
package ch10;
public class StringTest2 {
public static void main(String[] args) {
//한번 생성된 string은 불변(immutable)
// String을 연결하면 기존의 String에 연결되는 것이 아닌 새로운 문자열이 생성된다.
String java = new String("java");
String android = new String("Android");
System.out.println(java);
System.out.println(System.identityHashCode(java));
System.out.println("---------------------------");
//java = java + android;
java = java.concat(android);
System.out.println(java);//java + android
System.out.println(System.identityHashCode(java));
}//end of main
}//end of class
StringBuilder, StringBuffer
package ch10;
public class StringBuilderTest {
public static void main(String[] args) {
// StringBuilder, StringBuffer 활용
// 내부적으로 가변적인 char[]를 멤버변수로 가짐.
// 문자열을 여러번 연결하거나 변경할 때 사용하면 유용하다.
// StringBuffer 는 멀티 스레드 프로그래밍에서 동기화를 보장
// 단일 스레드 프로그램에서는 StringBuilder 사용하기를 권장
String java = new String("java");
String android = new String("android");
StringBuilder builder = new StringBuilder(java);
System.out.println(builder);
System.out.println(System.identityHashCode(builder));
System.out.println("--------------------------------");
builder.append(android);
System.out.println(builder);
System.out.println(System.identityHashCode(builder));
System.out.println("--------------------------------");
//문제 1 append 메서드 사용해서 3개 (주소값 확인 하기)
builder.append("안녕하세요");
builder.append("hi");
builder.append("hello");
System.out.println(builder);
System.out.println(System.identityHashCode(builder));//주소값 확인
System.out.println("--------------------------------");
//문제 2
String tempStr = builder.toString();
System.out.println(tempStr);
System.out.println(System.identityHashCode(tempStr));
}// end of main
}// end of class
toString()메서드
package ch11;
//많이 사용하는 기본 클래스들이 속한 패키지
import java.lang.*;
//toString() 메서드
class Student {
//ToString();가 이미 정의 됨
@Override // 재정의
public String toString() {
return "학생클래스";
}
}//end of class Student
public class ObjectTest extends Object {
//최상위 클래스, 상속을 하지 않더라도 기본적으로 가져옴
String str1;
public static void main(String[] args) {
//System.out.println(); //만들어준적 없는데 자바가 알아서 만들어줌
Student s1 = new Student();
System.out.println(s1);
String str1 = new String("안녕하세요");//사용 가능한 이유는 toString()이 이미 정의됨
System.out.println(str1);
}//end of main
}//end of class ObjectTest
equals() 메서드
package ch11;
public class MainTest1 {
public static void main(String[] args) {
Book book1 = new Book(1,"데미안","헤르만헤세");
Book book2 = new Book(1,"데미안","헤르만헤세");
System.out.println(book1 == book2);
boolean result = "a".equals("a");
System.out.println(result);
System.out.println("a" =="a");
System.out.println("------------------");
//equals 메서드를 재정의했다. (book 클래스 안에서)
if(book1.equals(book2)) {
System.out.println("같은 책입니다.");
}else {
System.out.println("다른 책입니다.");
}
}
}
toString()+equals 메서드
package ch11;
public class Book {
private int bookId;
private String title;
private String author;
public Book(int bookId, String title, String author) {
super();
this.bookId = bookId;
this.title = title;
this.author = author;
}
//toString 메서드 재정의 해보기
@Override
public String toString() {
return bookId + ","+ title +","+author;
}
//책이름 , 작가 까지 같아야 true
@Override
public boolean equals(Object obj) {
if(obj instanceof Book) {
Book tempBook = (Book)obj;
//논리적 설계
if(this.title == tempBook.title &&
this.bookId == tempBook.bookId &&
this.author == tempBook.author) {
return true;
}else {
return false;
}
}
return false;
}
public static void main(String[] args) {
Book book1 = new Book(1, "데미안 ","홍길동");
System.out.println(book1);
}//end of main
}//end if class
BorderLayout : 동서남북
package ch01;
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class BorderLayoutEx extends JFrame {
BorderLayout borderLayout;
JButton[] buttons = new JButton[5];
String[] title = { "북", "센터", "남", "동", "서" };
String[] directions = {
BorderLayout.NORTH,
BorderLayout.CENTER,
BorderLayout.SOUTH,
BorderLayout.EAST,
BorderLayout.WEST
};
//directions라는 배열을 선언과 동시에 초기화
//1. 배열 선언과 초기화 하는 방법
public BorderLayoutEx() {
initData();
setInitLayout();
}
private void initData() {
super.setTitle("BorderLayout 연습");
super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
super.setSize(400, 400);
borderLayout = new BorderLayout();
for (int i = 0; i < buttons.length; i++) {
buttons[i] = new JButton(title[i]);
// 0 -> 북, 1 -> 센터
}
}
private void setInitLayout() {
setVisible(true);
// super.add(buttons[0], BorderLayout.NORTH);
// super.add(buttons[1], BorderLayout.CENTER);
// super.add(buttons[2], BorderLayout.SOUTH);
// super.add(buttons[3], BorderLayout.EAST);
// super.add(buttons[4], BorderLayout.WEST);
// for문으로 변경해주세요
for (int i = 0; i < buttons.length; i++) {
//add JFrame
add(buttons[i], directions[i]);
}
}
public static void main(String[] args) {
new BorderLayoutEx();
}
}// end of class
GridLayout
package ch01;
import java.awt.*;//전체 가져오기
import java.awt.GridLayout;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JFrame;
public class GridLayoutEx extends JFrame{
ArrayList<JButton> buttons = new ArrayList<>();
private final int MAX_COUNT = 6;
public GridLayoutEx() {
initData();
setInitLayout();
}
private void initData() {
setTitle("GridLatout 연습");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 400);
for (int i = 0; i < MAX_COUNT; i++) {
buttons.add(new JButton((i+1)+""));
}
}
private void setInitLayout() {
setVisible(true);
setLayout(new GridLayout(2, 3));
//줄(rows),칸(cols)
//JFrame에 더한다
// add(buttons.get(0));
// add(buttons.get(1));
// add(buttons.get(2));
// add(buttons.get(3));
// add(buttons.get(4));
//for
for (int i = 0; i < buttons.size(); i++) {
add(buttons.get(i));
}
}
public static void main(String[] args) {
new GridLayoutEx();
}
}//end of class
NoLayout
package ch01;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JFrame;
public class NoLayoutEx extends JFrame{
ArrayList<JButton> buttons = new ArrayList<>();
public NoLayoutEx() {
initData();
setInitLayout();
}
private void initData() {
setTitle("No Layout 연습");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500, 500);
buttons.add(new JButton("1"));
buttons.add(new JButton("2"));
buttons.add(new JButton("3"));
//버튼 2개 더 생성
buttons.add(new JButton("4"));
buttons.add(new JButton("5"));
}
private void setInitLayout() {
//좌표값으로 컴포넌트 위치를 지정할 때는
setLayout(null);
//버튼 사이즈 설정
buttons.get(0).setSize(50, 50);
buttons.get(1).setSize(150, 50);
buttons.get(2).setSize(250, 50);
buttons.get(3).setSize(70, 70);
buttons.get(4).setSize(100, 100);
buttons.get(0).setLocation(10, 10);
buttons.get(1).setLocation(100, 100);
buttons.get(2).setLocation(200, 200);
buttons.get(3).setLocation(40, 20);
buttons.get(4).setLocation(350, 250);
//add
add(buttons.get(0));
add(buttons.get(1));
add(buttons.get(2));
//add 메서드 사용
add(buttons.get(3));
add(buttons.get(4));
setVisible(true);
}
public static void main(String[] args) {
new NoLayoutEx();
}
}//end of class
MyComponents
package ch02;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class MyComponents extends JFrame{
private JPanel panel;
private JButton button;
private JLabel label;
JTextField textField;
private JPasswordField jPasswordField;
private JCheckBox checkBox;
public MyComponents() {
initData();
setInitLayout();
}
private void initData() {
setTitle("컴포넌트 연습");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(800, 800);
panel = new JPanel();
button = new JButton("button");
textField = new JTextField("힌트 ", 20);
jPasswordField = new JPasswordField(20);
checkBox = new JCheckBox("checkBox", true);
label =new JLabel("label");
}
private void setInitLayout() {
setVisible(true);
setLayout(new FlowLayout());
add(panel);
panel.add(button);
panel.add(label);
panel.add(textField);
panel.add(jPasswordField);
panel.add(checkBox);
}
}
MainTest1
package ch02;
import java.util.Scanner;
public class MainTest1 {
public static void main(String[] args) {
MyComponents mc = new MyComponents();
//NullPointerException -> 객체 주소를 넣지 않았거나
System.out.println("글자를 입력하세요");
Scanner scanner = new Scanner(System.in);
String userInput = scanner.nextLine();
// System.out.println(userInput);
mc.textField.setText(userInput);
}
}
Object 클래스 - 모든 클래스의 최상위 클래스
java.lang 패키지
- 프로그래밍 시 import 하지 않아도 자동으로 import됨
- import.java.lang.*;
- 많이 사용하는 기본 클래스들이 속한 패키지
- String, System...
모든 클래스는 object 클래스를 상속 받는다.
- java.lang.Object 클래스
- 모든 클래스의 최상위 클래스는
- 모든 클래스는 Object에서 상속 받고, Object 클래스의 메서드 중 일부는 재정의해서 사용할 수 있음
- 컴파일러가 extends Object를 추가함
- class Student =>class Student extends Object
toString() 메서드
- 객체의 정보를 String으로 바꿔서 사용할 때 쓰임
- 많이 사용하는 String은 이미 재정의 되어 있음
- toString()메서드 재정의 예
class Book{
private String title;
private String author;
public Book(String title, String author){
this.title = title;
this.author = author;
}
public String toString(){
return title + "," + author;
}
}//end of class
public class BookTest{
public static void main(String[] args) {
Book book = new Book("데미안", "헤르만헤세");
System.out.println(book);
}
}
equals() 메서드
- 두 인스턴스의 주소 값을 비교하여 true/false를 반환
- 재정의 하여 두 인스턴스가 논리적으로 동일함의 여부를 구현함
- 인스턴스가 다르더라도 논리적으로 동일한 경우 true를 반환하도록 재정의 할 수있음 (같은 학번, 같은 사번, 같은 아이디의 회원...)
class Book { private int bookId; private String title; private String author; public Book(int id, String title, String author) { this.bookId = id; this.title = title; this.author = author; } // toString 메서드 재정의 @Override public String toString() { return bookId + "," + title + "," + author; } // equals 메서드 재정의 @Override public boolean equals(Object obj) { if (obj instanceof Book) { // --> true 이면 if 안에 로직 실행 Book tempBook = (Book) obj; if (this.title == tempBook.title && this.author == tempBook.author) { return true; } else { return false; } } return false; } }
'코리아 IT아카데미 > Java' 카테고리의 다른 글
16일차 | thread 동기화 , gif 넣기, 로또 번호 생성기 (0) | 2021.11.08 |
---|---|
12일차 | 예외 처리 swing 객체 지향 기법 연습 (0) | 2021.11.02 |
ddazua_Java | 4강 연산자2 (0) | 2021.11.01 |
10일차 | interface, static, swing(FlowLaout)+array, arraylist, for문 변경 (0) | 2021.10.30 |
9일차| 다형성, 업캐스팅, 배열다형성, 다운캐스팅, 추상메서드, 템플릿 메서드 패턴 (0) | 2021.10.28 |