오늘은 상속과 JFrame에 사진 넣는 방법에 대해 배우게 되었습니다. 배운 내용을 정리해보면서 복습해보도록 하겠습니다!
1. 필드 (전역 변수)와 지역 변수
- 필드(전역 변수)는 클래스 내부에 선언되어 클래스의 모든 메서드에서 사용 가능하며, 기본 초기값을 갖습니다.
지역 변수는 메서드 내부에 선언되어 해당 메서드 내에서만 사용 가능하며, 초기값이 주어지지 않습니다.
2. 상속 관계
- 상속은 객체 지향 프로그래밍에서 부모 클래스와 자식 클래스 간의 관계를 나타냅니다.
자식 클래스는 부모 클래스의 특성과 동작을 상속받아 재사용할 수 있습니다.
2-1) Overriding (메서드 재정의)
- Overriding은 자식 클래스에서 부모 클래스의 메서드를 다시 정의하여 사용하는 것입니다.
이를 통해 자식 클래스에서 부모 클래스의 메서드를 수정하거나 확장할 수 있습니다.
2-2) DAO (Data Access Object)
- DAO는 데이터베이스와의 상호 작용을 추상화하는 디자인 패턴 중 하나입니다.
데이터베이스 접근을 위한 인터페이스와 구현 클래스를 제공하여 데이터베이스와의 통신을 캡슐화합니다.
2-3) 클래스와 객체의 차이점
- 클래스는 객체를 생성하기 위한 템플릿 또는 설계도로, 실제 데이터를 갖지 않습니다.
- 객체는 클래스의 인스턴스로, 클래스의 구조를 따르며 실제 데이터와 동작을 가집니다.
2-4) 상속의 장점
- 코드 재사용: 부모 클래스의 멤버(필드와 메서드)를 자식 클래스에서 재사용할 수 있습니다.
- 코드 간결화: 공통된 동작을 부모 클래스에서 구현하고 자식 클래스에서 이를 확장하면 코드가 간결해집니다.
- 객체 생성 단일화: 부모 클래스로부터 파생된 모든 자식 클래스의 객체를 동일한 방식으로 생성할 수 있습니다.
- 상속을 통해 코드의 재사용성을 높이고 유지보수를 편리하게 할 수 있습니다. 클래스와 객체의 차이점은 클래스가 설계 도면이라면 객체는 실제 물건(인스턴스)이라고 생각할 수 있습니다. 클래스는 객체를 생성하기 위한 청사진이며, 객체는 그 청사진을 따라 만들어진 실체입니다.
car예제로 상속 알아보기
Car 클래스
package inheritance.test1;
public class Car {
String manufacturer; // 제조사
String name; // 자동차명
int displacement; // 배기량
/*
* public Car() { System.out.println("Car() 생성자 호출됨"); }
*/
public Car(String manufacturer, String name, int displacement) {
super();
this.manufacturer = manufacturer;
this.name = name;
this.displacement = displacement;
System.out.println("car(String manufacturer, String name, int displacement)");
}
public void start() {
System.out.println("(Car)시동을 걸다");
}
}
- Car 클래스는 자동차를 나타내며, manufacturer (제조사), name (자동차명), displacement (배기량) 필드를 가집니다.
- 생성자 Car(String manufacturer, String name, int displacement)를 통해 필드를 초기화하고, 자동차 정보를 출력합니다.
- start() 메서드는 자동차 시동을 걸 때 호출되며, "(Car)시동을 걸다" 메시지를 출력합니다.
CarController 클래스
package inheritance.test1;
public class CarController {
public static void main(String[] args) {
EV6 ev1 = new EV6();
ev1.start();
ev1.drive();
ev1.driveAutonomusly();
ev1.stop();
}
}
- main 메서드에서 EV6 클래스의 객체를 생성하고, 해당 객체의 메서드를 호출하여 EV6 자동차의 동작을 테스트합니다.
EV6 클래스
package inheritance.test1;
public class EV6 extends KIA {
int chargeBattery;
String softwareModel;
public EV6() {
//super(); //이게 원래 생략되어 있음
System.out.println("EV6() 생성자 호출됨");
}
public void driveAutonomusly() {
System.out.println("EV6가 자율주행을 하다.");
}
@Override
public void stop() {
System.out.println("Ev6가 멈추다.");
}
//turn + ctrl + space
@Override
public void turn(String direction) {
System.out.println("EV6가 " + direction + "하다");
}
}
- EV6 클래스는 KIA 클래스를 상속받아 자동차 모델인 EV6을 나타냅니다.
- chargeBattery (배터리 충전량)와 softwareModel (소프트웨어 모델) 필드를 추가로 가집니다.
- 생성자 EV6()에서 KIA 클래스의 생성자를 호출하고, "EV6() 생성자 호출됨" 메시지를 출력합니다.
- driveAutonomusly() 메서드는 EV6 자동차가 자율 주행을 할 때 호출되며, "EV6가 자율주행을 하다." 메시지를 출력합니다.
- stop() 메서드는 EV6 자동차가 멈출 때 호출되며, "EV6가 멈추다." 메시지를 출력합니다.
- turn(String direction) 메서드는 자동차가 특정 방향으로 회전할 때 호출되며, 해당 방향을 출력합니다.
KIA 클래스
package inheritance.test1;
public class KIA extends Car {
String modelNum;
String color;
public KIA() {
super("기아자동차", "기아", 2500);
System.out.println("KIA() 생성자 호출됨");
}
public void drive() {
System.out.println("KIA 자동차가 주행중이다.");
}
public void stop() {
System.out.println("KIA 자동차가 멈추다.");
}
public void turn(String direction) {
System.out.println("KIA 자동차가" + direction + "회전하다.");
}
}
- KIA 클래스는 Car 클래스를 상속받아 KIA 자동차를 나타냅니다.
- modelNum (모델 번호)와 color (색상) 필드를 추가로 가집니다.
- 생성자 KIA()에서 Car 클래스의 생성자를 호출하고, "KIA() 생성자 호출됨" 메시지를 출력합니다.
- drive() 메서드는 KIA 자동차가 주행 중일 때 호출되며, "KIA 자동차가 주행중이다." 메시지를 출력합니다.
- stop() 메서드는 KIA 자동차가 멈출 때 호출되며, "KIA 자동차가 멈추다." 메시지를 출력합니다.
- turn(String direction) 메서드는 자동차가 특정 방향으로 회전할 때 호출되며, 해당 방향을 출력합니다.
클래스를 만들면서 상속받기
JFrame에 사진넣기
javax.swing.JFrame : 윈도우 창
- JFrame
package gui;
import javax.swing.JFrame;
public class JFrameTest1 {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setTitle("JFrame 연습1");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocation(200, 200);
frame.setSize(500, 300);
frame.setVisible(true);
}
}
사진 넣기
//사진 넣기
JLabel lb1 = new JLabel(" ", JLabel.CENTER); //가운데로 수평정렬
ImageIcon icon = new ImageIcon("imgs/chunsick!.jpg");
lb1.setIcon(icon);
frame.add(lb1);
2번째 JFrameTest
package gui;
import javax.swing.JFrame;
//JFrame 클래스
public class JFrameTest2 extends JFrame {
public JFrameTest2() {
setTitle("JFrame 상속 연습"); //JFrame. 필요없음 -> 상속받았기 때문
setDefaultCloseOperation(EXIT_ON_CLOSE); //무조건 있어야함 끝내는것
setLocation(200, 200); //x, y 좌표 /위치
setSize(500, 300); //너비 높이 길이 설정 /크기
setVisible(true);
}
public static void main(String args[]) {
new JFrameTest2();
}
}
코드가 더 단순해짐 → 상속받는 것이 중요
이미지 넣기 2번째 방법
ImageIcon icon = new ImageIcon("imgs/chunsick!.jpg");
JLabel lb1 = new JLabel(icon, JLabel.CENTER);
add(lb1);
Event Programming
EventListner ← Interface
- JFrame 클래스에 EventHandler(Listener) 클래스
- Inner(내부) 클래스에 EventHandler(Listener) 클래스
- Anonymous(익명) 클래스 EventHandler(Listener) 클래스
- 독립된 클래스에 EventHandler(Listener) 클래스
→ 총 4가지 방법이 있다
1번째 방법
package gui;
import java.awt.Event;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
//JFrame 클래스
import javax.swing.JLabel;
import javax.swing.JPanel;
public class JFrameTest2 extends JFrame implements ActionListener {
// JPanel 만들기
ImageIcon icon = new ImageIcon("imgs/yeonJun.jpg");
JLabel lb1 = new JLabel(icon, JLabel.CENTER);
JPanel pan = new JPanel();
//버튼만들기
JButton btn1 = new JButton("Ive");
JButton btn2 = new JButton("Tomorrow by Together");
JButton btn3 = new JButton("Black Pink");
public JFrameTest2() {
btn1.addActionListener(this); // 현재 클래스 값
btn2.addActionListener(this);
btn3.addActionListener(this);
pan.add(btn1);
pan.add(btn2);
pan.add(btn3);
add(pan, "North"); // 꼭 대문자로 스기
add(lb1, "Center");
setTitle("JFrame 상속 연습"); // JFrame. 필요없음 -> 상속받았기 때문
setDefaultCloseOperation(EXIT_ON_CLOSE); // 무조건 있어야함 끝내는것
setLocation(200, 200); // x, y 좌표 /위치
setSize(500, 300); // 너비 높이 길이 설정 /크기
setVisible(true);
}
public static void main(String args[]) {
new JFrameTest2();
}
@Override
public void actionPerformed(ActionEvent e) {
JButton btnSource = (JButton) e.getSource(); //JButton으로 형변환하기
//위랑 똑같은 내용 Object btnSource = e.getSource();
if(btnSource == btn1) {
icon = new ImageIcon("imgs/ive.jpg");
}else if(btnSource == btn2) {
icon = new ImageIcon("imgs/TXT.jpg");
}else {
icon = new ImageIcon("imgs/bp.jpg");
}
lb1.setIcon(icon);
}
}
'AfterSchool > 자바 방과후' 카테고리의 다른 글
Vending machine GUI로 만들기(1231) (2) | 2023.01.03 |
---|---|
깃허브 쓰는법, Vending Machine 로직소스 만들기(1230) (0) | 2022.12.30 |
성적프로그램과 BMI프로그램 만들기(1229) (0) | 2022.12.29 |
Event Programming EventListener 4가지 방법과 도서 정보 관리 시스템(1228) (0) | 2022.12.28 |
MVC 모델, ArrayList, 오버라이딩 기초를 배워서 학생 정보 관리 시스템 만들기(1226) (0) | 2022.12.26 |