일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Java의정석
- 자바스크립트
- react
- Oracle
- javascript
- php
- spring
- 자스코테
- 정보처리기사
- 정보처리기사정리
- 코딩테스트
- 이안의평일코딩
- 오라클
- 타입스크립트
- 정보처리기사실기요약
- CSS
- 국비코딩
- ReactNative
- VUE
- 리액트네이티브
- 정보처리기사실기정리
- 리액트
- 평일코딩
- 자바스크립트 코딩테스트
- 자바의정석
- 정보처리기사요약
- 스프링
- 국비IT
- 정보처리기사실기
- typescript
- Today
- Total
이안의 평일코딩
JAVA의 정석 23일차 - 객체지향 본문
2020.07.15(수)
=[복습]=
1. 클래스의 종류
1) 추상클래스 ==> 미완성 클래스 => 반드시 구현해서 사용
2) 인터페이스(Spring의 기반) ==> 미완성 클래스 => 반드시 구현해서 사용
3) 내부클래스 => 쓰레드, 윈도우, 네트워크
=> 멤버클래스 지역클래스 익명의클래스
4) 종단클래스(Final Class) => 확장이 불가능 => final(String, Math, System)
2. 데이터 저장
1) 변수 정수(int, long), 실수(double), 논리(boolean), 문자
2) 참조변수 => 4byte (메모리주소만 저장됨) => 배열(1차원배열)
예) int[] arr = new int[5]
클래스(사용자 정의 데이터형)
Movie m = new Movie()
==> new가 Movie 메모리 크기 확인 (4byte 4개 => 16byte)
예) class Movie { => heap 사용자 정의 데이터가 저장되는 위치
String title;
String director;
String actor;
int rank;
}
클래스는 .(주소접근연산자)를 통해서 (m.title)
자바메모리 구조 : JVM(가상머신: 관리)
Class (Method, static) |
Stack (지역변수, 매개변수) => { }끝날 때 자동으로 사라짐 => 메모리 관리 |
heap (멤버변수 클래스밖에서선언) => new(저장공간 만들어줌) |
3. 데이터 처리
1) 연산자
(1) 단항연산자 : 증감연산자(++, --), 부정연산자(!), 캐스팅연산자((type))
(2) 산술연산자 : +, -, *, /, %
(3) 비교연산자 : ==, !=, <, >, <=, >=
(4) 논리연산자 : &&, ||
(5) 대입연산자 : =, +=, -=
2) 제어문 => 조건문(if, if~else, if~else if~else if~else) 반복문(while, for, for~each) 반복제어문(break)
명령문(;세미콜론) => 메소드 (한개의 기능, 재사용) => 클래스 => 패키지 => .jar(라이브러리)
4. 메소드
1) 사용자로부터 받는 값 => 매개변수
2) 처리한 후 결과값 => 리턴형 (결과값 없을 때 void)
* 데이터베이스 CURD (create, update, read, delete)
==========================================================
1. 메소드
= 리턴값
= 매개변수 : 애매한 경우
printf("%d%d%d",10,20,30)
printf("%d",100)
============== 가변매개변수... (갯수 확인안될 때 "..." 사용)
String... a
Object... obj (데이터형, 갯수 둘다 모를 때)
Object (데이터형 통합) => 어떤 값이 들어와도 됨
public static void main(String[] args) {
Object o=10;
Object o1=0.5;
Object o2='A';
Object o3="aaaaa";
Object o4=new 메소드();
}
package com.sist.method;
public class 메소드 {
public static void concat(String s, String... s1) {
for(String ss:s1) { //for~each사용
s+=ss;
}
System.out.println(s);
}
public static void main(String[] args) {
concat("Hello","홍길동","심청이","박문수","춘향이","이순신");
}
}
display(int, int)
display(String, String, int)
display(String, int, double)
=> display(Object...arg) =>데이터형이 섞여있을때 Object. 오버로딩보다 가변매개변수가 더 편함
(오버로딩은 갯수만큼 만들어야 되기 때문에)
display(int, int)
display(int, int, int)
display(int, int, int)
=> display(int...arg) =>데이터형이 하나로 통일됐을때
package com.sist.method;
import java.lang.reflect.Method;
class A{
public void display1(String name) {
System.out.println("Hello~~\n"+name);
}
public void display2(String name) {
System.out.println("Hello~~\n"+name);
}
}
public class 메소드2 {
public static void main(String[] args) {
//A a = new A();
//a.display("홍길동");
try { // new대신 메모리할당 가능
Class clsName = Class.forName("com.sist.method.A");
Object obj = clsName.newInstance();
//System.out.println(obj);
//A a = (A)obj; //클래스 형변환
//a.display("심청이");
Method[] method = clsName.getDeclaredMethods();
//method[0].invoke(obj, "이순신"); //invoke로 메소드 호출
for(Method m:method) {
System.out.println(m.getName()); //display1, display2
}
}catch(Exception ex) {}
}
}
class AA{
//메소드는 리턴형이 있어야함
public void AA() { //일반 인스턴스 메소드
System.out.println("AA() Call...");
// void자체가 리턴형(결과값이 존재하지 않는다)
}
public AA() {//생성자 데이터형, 리턴형 붙으면 안됨 :특수메소드=>메모리에 저장
System.out.println("AA() Call...");
}
}
명시적 => 초기화 블록(자동으로 가능) => 생성자(호출해야 가능)
생성자, 초기화블럭, static은 상속되지 않는다.
1) 퍼즐게임
package com.sist.client;
// 생성자 => 변수
// GridLayout
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
// 윈도우창 => JFrame
/*
* break
* continue
* ========= 반복문 한개만 제어
* for(int i=1; j<=5; i++) {
* for(int j=1; j<=5; j++) { //25바퀴임 원래
* if(j==2)
* break; // i=1일때
* }
* }
*/
public class PuzzleGame extends JFrame implements ActionListener{
JButton b1,b2;
JButton[][] pan = new JButton[3][3];
int[][] panCount=new int[3][3];
int brow = 0;
int bcol = 0;
// 0~8 난수 발생
public void getRand() {
int[] com = new int[9]; //중복없는 난수값을 저장
int su = 0; //난수발생시 저장한 변수
boolean bCheck = false; //중복여부 확인
for(int i=0; i<9; i++) {
//난수 발생
bCheck=true;
while(bCheck) {
su=(int)(Math.random()*9); //0~8
bCheck=false;
// 검색 => 저장된 데이터가 중복여부 확인
for(int j=0; j<i; j++) {
if(su==com[j]) {// 같은 수가 저장
// while을 다시 수행
bCheck=true; // 같은수가 있다면 break되고 다시 while문으로
break; //자기 소속 for제어문 j만 가능 while문은 i는 계속 반복됨
}
}
}
com[i]=su;
panCount[i/3][i%3]=su;
if(su==8) {
brow=i/3;
bcol=1%3;
}
}
}
// 배치 함수
public void display() {
for(int i=0; i<3; i++) {
for(int j=0; j<3; j++) {
if(i==brow && j==bcol) {
pan[i][j].setText("");
pan[i][j].setEnabled(false); //비활성화
}
else {
pan[i][j].setText(String.valueOf(panCount[i][j]+1));
pan[i][j].setEnabled(true); //활성화
}
}
}
}
// 버튼 클릭
public PuzzleGame() { //생성자 => 클래스를 메모리에 저장할 때 가장 먼저 호출되는 메소드
// 배치
b1 = new JButton("시작");
b2 = new JButton("종료");
JPanel p = new JPanel();
p.add(b1);p.add(b2);
add("South",p);
JPanel p2 = new JPanel();
p2.setLayout(new GridLayout(3,3,5,5)); //
int k=1;
for(int i=0; i<3; i++) {
for(int j=0; j<3; j++) {
pan[i][j] = new JButton(String.valueOf(k));
pan[i][j].setFont(new Font("굴림체",Font.BOLD,50));
p2.add(pan[i][j]);
pan[i][j].addActionListener(this);
k++;
}
}
add("Center",p2);
getRand();
display();
setSize(350, 400);
setVisible(true);
b1.addActionListener(this); // 이벤트 등록
}
public static void main(String[] args) {
new PuzzleGame();
//생성자 호출시에는 반드시 앞에 new를 붙임
}
//종료여부 확인
public boolean isEnd() {
int k=0;
for(int i=0; i<3; i++) {
for(int j=0; j<3; j++) {
if(panCount[i][j]!=k)
return false;
k++;
}
}
return true;
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==b1) {
getRand();
display();
}
for(int i=0; i<3; i++) {
for(int j=0; j<3; j++) {
if(e.getSource()==pan[i][j]) {
panCount[brow][bcol]=panCount[i][j];
panCount[i][j]=8;
brow=i;
bcol=j;
display();
if(isEnd()) {
JOptionPane.showMessageDialog(this, "Game Over!!");
System.exit(0);
}
}
}
}
}
}
2)
Server
package com.sist.server;
import com.sist.common.*;
import java.net.*;
public class Server {
//시작하면 => 서버가 가동
public static void main(String[] args) {
}
}
Fuction
package com.sist.common;
public class Function {
public final int LOGIN=100;
public final int MYLOG=110;
public final int CHAT=200;
public final int RESERVE=300;
public final int EXIT=900;
public final int MYEXIT=910;
}
RecipeForm
package com.sist.client;
import java.awt.*;
import javax.swing.*;
public class RecipeForm extends JPanel{
JLabel poster = new JLabel();
JLabel title = new JLabel();
JLabel chef = new JLabel();
JLabel score = new JLabel();
// 초기화
public RecipeForm() {
setLayout(null);
poster.setBounds(5, 5, 300, 170);
poster.setOpaque(true);
poster.setBackground(Color.pink);
title.setBounds(5, 180, 300, 30);
title.setOpaque(true);
title.setBackground(Color.orange);
chef.setBounds(5, 215, 300, 30);
chef.setOpaque(true);
chef.setBackground(Color.cyan);
score.setBounds(5, 250, 300, 30);
score.setOpaque(true);
score.setBackground(Color.magenta);
add(poster);add(title);add(chef);add(score);
}
}
RecipeManager
package com.sist.client;
import java.awt.*;
import javax.swing.*;
public class RecipeManager extends JPanel{
RecipeForm[] recipes = new RecipeForm[9];
public RecipeManager() {
setLayout(null);
JPanel p = new JPanel();
p.setLayout(new GridLayout(3,3,5,5));
for(int i=0; i<9; i++) {
recipes[i]=new RecipeForm();
p.add(recipes[i]);
}
p.setBounds(10, 15, 1000, 900);
add(p);
}
}
RecipeMainFrame
package com.sist.client;
import com.sist.common.*;
import java.awt.*;
import java.awt.event.*; //버튼 클릭할때 처리하는 내용포함
import javax.swing.*;
public class RecipeMainFrame extends JFrame implements ActionListener{ //창 따로 만들지않고 윈도우창 하나에다가
//JFrame f = new JFrame();
//배치
CardLayout card = new CardLayout();
login login=new login();
JoinForm join=new JoinForm();
RecipeManager rm=new RecipeManager();
public RecipeMainFrame() {
//생성자 : GUI의 화면 디자인, 변수 초기화, 데이터베이스 연결, 서버연결, 쓰레드 동작
//Layout => 화면 배치
setLayout(card);
// 화면추가
add("RM",rm);
add("LOGIN",login);
add("JOIN",join);
setSize(1024, 960);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE); //메모리회수
login.b2.addActionListener(this);
join.b3.addActionListener(this);
}
public static void main(String[] args) throws Exception{
UIManager.setLookAndFeel("com.jtattoo.plaf.mcwin.McWinLookAndFeel");
new RecipeMainFrame();
}
@Override
public void actionPerformed(ActionEvent e) { //창이동
if(e.getSource()==login.b2) {
card.show(getContentPane(), "JOIN");
}
else if(e.getSource()==join.b3) {
card.show(getContentPane(), "LOGIN");
}
}
}
'Back-end > Java' 카테고리의 다른 글
JAVA의 정석 25일차 - Layout (0) | 2020.07.17 |
---|---|
JAVA의 정석 24일차 - 추상클래스, 인터페이스 (0) | 2020.07.16 |
JAVA의 정석 22일차 - 객체지향 다형성 (0) | 2020.07.14 |
JAVA의 정석 21일차 - 객체지향 캡슐화, 상속 (0) | 2020.07.13 |
JAVA의 정석 20일차 - 클래스 생성 (0) | 2020.07.10 |