일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 리액트
- 정보처리기사실기정리
- 정보처리기사정리
- ReactNative
- 자바의정석
- 정보처리기사요약
- 평일코딩
- php
- 스프링
- 정보처리기사실기
- 자바스크립트
- 자바스크립트 코딩테스트
- 리액트네이티브
- 이안의평일코딩
- typescript
- 타입스크립트
- react
- 국비IT
- 정보처리기사실기요약
- javascript
- 자스코테
- CSS
- 오라클
- spring
- Oracle
- 정보처리기사
- VUE
- Java의정석
- 코딩테스트
- 국비코딩
- Today
- Total
이안의 평일코딩
JAVA의 정석 25일차 - Layout 본문
2020.07.17(금)
1. 클래스 종류
1) 일반클래스 (핵심)
형식)
public class className {
멤버변수, 공유변수
생성자
메소드
}
(1) 데이터형으로만 사용
=> 필요한 데이터를 모아서 관리 (캡슐화) => 데이터를 은닉화 메소드를 통해 접근
private getter/setter
(2) 액션 ==> 기능만 가지고 있다 =(메소드)
(3) 변수 + 메소드 = 혼합
===============
2) 추상클래스
public abstract class className {
멤버변수 / 공유변수
구현이 안된 메소드 => 미완성 클래스
구현이 된 메소드
}
(1) 자신이 메모리 할당이 불가능
(2) 생성 ==> 상속받은 클래스를 통해서 메모리에 저장
(3) 단일 상속
(4) 상속을 받은 클래스는 반드시 구현이 안된 메소드를 구현해서 사용
(5) 여러개 클래스가 있는 경우 => 공통으로 적용된 메소드가 있는 경우에 추상클래스 제작
(6) 구분 => 메모리할당시 => 클래스선언 => 생성자
A a = new A() 일반클래스 생성자와 동일
A a = new B() 추상클래스 생성자다름
(7) 메소드 구현이 애매한 경우 (경우의 수가 많다)
예) 먹는다()
개, 소, 돼지, 말
예) 버튼 클릭()
(8) 기본 틀이 제작 => 구현이 쉽다
(9) 요구사항 분석
3) 인터페이스 : 웹프로그램
(1) 추상클래스의 일종
(2) 다중 상속
(3) 형식)
public interface interfaceName {
변수 : 상수형 변수 ==> public final static 데이터형 = 값
생략시에는 자동으로 추가(private, protected는 사용금지)
메소드 : 구현이 안된 메소드만 가지고 있다 => 구현해야 사용 가능
}
*** JDK1.8이상 ==> default ==> 구현된 메소드 작성
*** 실무 : JDK1.7 , 오라클 : 11g , 스프링 : 3.7~8
(4) 인터페이스 => 클래스 (상위 클래스) => 상속을 내려야 사용이 가능
* 인터페이스는 클래스로부터 상속 받을 수 없다
* 인터페이스 => 인터페이스 extends
* 인터페이스 => 클래스 implements
예)
interface A
interface B extends A
interface A
class B implements A
=======================다중상속
interface A
class B
class C extends B implements A
interface A
interface B
class C implements A, B
=> 여러개의 관련이 없는 클래스를 연결해서 사용하는 프로그램
=> 결합성(다른 클래스 영향?)이 낮은 프로그램을 만들 경우에 주로 사용 (스프링)
스프링 ==> 인터페이스 기반
===============2)3) 관련된 클래스가 여러개 => 묶어서 사용(통합)
= 데이터베이스 연결
= 웹프로그램 (MVC)
4) 내부클래스 : 어플리케이션
= 멤버클래스 : 두개이상의 클래스에서 한개의 데이터 공유할 경우
네트워크 프로그램, 쓰레드 프로그램, 빅데이터
class A {
O, X, K
}
class B {
A a = new A(); //메모리할당
a.O , a.X , a.K
}
==> B b = new B();
B b1 = new B(); b와 b1 둘은 갖고있는 값이 다르게 됨
class A {
O, K, X
class B { //멤버클래스 A클래스, B클래스 공통적으로 써야되는 데이터가 있을 때 사용
}
}
5) 익명의클래스(포함) : 상속없이 => 오버라이딩 (윈도우 클래스)
class A {
}
class B {
}
class C extends A,B { ==> error
}
class C extends A {
B b = new B() {
오버라이딩이 가능하다
}
}
내부 클래스
class A {
class B {
class C {
}
}
}
A.B.C
==> B b = new B(); => 사용할 수 없다
class C {
B b = new B(); (X)
A.B b; (A클래스 밑 B클래스 가져와라)
}
* 미리 색상을 채워넣고 사이즈 블록을 맞추면 편함(주석처리 된부분 참고)
ClientMainFrame
package com.sist.client;
// 윈도우 => JFrame
// 윈도우와 관련된 클래스를 읽어온다
import javax.swing.*;
import java.awt.*; //Color, Layout
import java.awt.event.*; //interface
/*
* 재사용
* = 상속 (is-a) : 기존의 클래스를 변경해서 사용
* public class ClientMainFrame extends JFrame
* ==============> JFrame의 기능을 전체 가지고 온다
* class A {
* O X W
* }
* class B extends A {
* O X W
* }
* = 포함 (has-a) : 기존의 클래스를 변경없이 사용
* public class ClientMainFrame {
* JFrame f = new JFrame();
* }
*/
public class ClientMainFrame extends JFrame implements ActionListener{
JLabel title = new JLabel("레시피 & 맛집 추천사이트", JLabel.CENTER);
MenuForm mf = new MenuForm();
ChatForm cf = new ChatForm();
ControllPanel cp = new ControllPanel();
// 윈도우 크기 결정 => 생성자에서 사용
public ClientMainFrame() {
/*
* 클래스에서 생성자 사용 => 선언이 아니라 => 구현할 때
* 예)
* 데이터베이스 : 오라클연결
* 네트워크 : 셋팅 => IP, PORT => 핸드폰 (개통)
* 웹 : 쿠키에서 값읽기 => 자동로그인
*/
title.setFont(new Font("굴림체", Font.BOLD, 55));
//title.setOpaque(true); // 불투명
//title.setBackground(Color.magenta);
setLayout(null); // JFrame (BorderLayout) 사용자 정의로 배치 => null
title.setBounds(10, 15, 1570, 100);
// 추가 => add()
add(title);
// 메뉴 배치
mf.setBounds(10, 120, 100, 400);
add(mf);
// 채팅폼
cf.setBounds(115, 760, 1465, 200);
add(cf);
// 출력화면
cp.setBounds(115, 120, 1465, 635);
add(cp);
setSize(1600, 1000);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE); // X버튼 클릭시 종료
mf.b1.addActionListener(this);
mf.b2.addActionListener(this);
}
public static void main(String[] args) throws Exception{
// 생성자 위에
UIManager.setLookAndFeel("com.jtattoo.plaf.mcwin.McWinLookAndFeel");
// 생성자는 호출시에 반드시 => new 생성자();
new ClientMainFrame();
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==mf.b1) {
cp.card.show(cp, "DF"); //ControllPanel에 이름이 DF인 df =>detailform
}
else if(e.getSource()==mf.b2) {
cp.card.show(cp, "LF"); //LF => listform
}
}
}
MenuForm
package com.sist.client;
import java.awt.*;
import javax.swing.*;
public class MenuForm extends JPanel {
JButton b1,b2,b3,b4,b5,b6,b7;
// 버튼 초기화 => 배치 (생성자)
public MenuForm() {
//setBackground(Color.orange);
b1 = new JButton("홈");
b2 = new JButton("레시피");
b3 = new JButton("랭킹");
b4 = new JButton("추천");
b5 = new JButton("셰프");
b6 = new JButton("맛집");
b7 = new JButton("종료");
setLayout(new GridLayout(7,1,5,5)); //레이아웃 디폴트 flowLayout 패널 가로로
add(b1);add(b2);add(b3);add(b4);add(b5);add(b6);add(b7);
}
}
ChatForm
package com.sist.client;
import java.awt.Color;
import javax.swing.*;
public class ChatForm extends JPanel{
public ChatForm() {
//setBackground(Color.yellow);
}
}
채팅창
package com.sist.client;
import java.awt.Color;
import javax.swing.*;
import javax.swing.table.*;
public class ChatForm extends JPanel{
JTextArea ta;
JTextField tf;
JComboBox box;
JTable table;
DefaultTableModel model;
JButton b1,b2;
public ChatForm() {
//setBackground(Color.yellow);
setLayout(null);
ta = new JTextArea(); //텍스트창
JScrollPane js = new JScrollPane(ta); //스크롤바
js.setBounds(10, 15, 850, 140);
add(js);
tf = new JTextField(); //텍스트줄
tf.setBounds(10, 160, 740, 30);
add(tf);
box = new JComboBox(); //선택박스
box.addItem("black");
box.addItem("red");
box.addItem("blue");
box.addItem("green");
box.addItem("gray");
box.addItem("yellow");
box.addItem("cyan");
box.setBounds(755, 160, 105, 30);
add(box);
//테이블
String[] col = {"ID", "대화명", "성별"};
String[][] row = new String[0][3];
model = new DefaultTableModel(row, col);
table = new JTable(model);
JScrollPane js1 = new JScrollPane(table);
js1.setBounds(865, 15, 500, 140);
add(js1);
//버튼
JPanel p = new JPanel();
b1 = new JButton("정보보기");
b2 = new JButton("쪽지보내기");
p.add(b1);p.add(b2);
p.setBounds(865, 160, 500, 35);
add(p);
}
}
ControllPanel
package com.sist.client;
import java.awt.*;
import javax.swing.*;
public class ControllPanel extends JPanel{
CardLayout card = new CardLayout();
ListForm lf = new ListForm();
DetailForm df = new DetailForm();
//변경되는 화면은 컨트롤 패널 가지고있어야함
public ControllPanel() {
setLayout(card);
add("LF",lf);
add("DF",df);
}
}
ListForm
package com.sist.client;
import java.awt.Color;
import javax.swing.*;
public class ListForm extends JPanel{
public ListForm() {
//setBackground(Color.pink);
}
}
DetailForm
package com.sist.client;
import java.awt.Color;
import javax.swing.*;
public class DetailForm extends JPanel{
public DetailForm() {
//setBackground(Color.cyan);
}
}
'Back-end > Java' 카테고리의 다른 글
JAVA의 정석 27일차 - 예외회피 (0) | 2020.07.21 |
---|---|
JAVA의 정석 26일차 - 예외처리 (0) | 2020.07.20 |
JAVA의 정석 24일차 - 추상클래스, 인터페이스 (0) | 2020.07.16 |
JAVA의 정석 23일차 - 객체지향 (0) | 2020.07.15 |
JAVA의 정석 22일차 - 객체지향 다형성 (0) | 2020.07.14 |