일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- VUE
- Java의정석
- javascript
- 코딩테스트
- 정보처리기사정리
- 자바스크립트 코딩테스트
- 자바의정석
- php
- CSS
- 정보처리기사실기정리
- Oracle
- ReactNative
- 정보처리기사실기요약
- typescript
- 자스코테
- 타입스크립트
- 정보처리기사요약
- 평일코딩
- 오라클
- 리액트
- 국비코딩
- 리액트네이티브
- 국비IT
- spring
- 자바스크립트
- 스프링
- react
- 이안의평일코딩
- 정보처리기사
- 정보처리기사실기
- Today
- Total
이안의 평일코딩
JAVA의 정석 28일차 - java.lang패키지 Object클래스 본문
2020.07.22(수)
package com.sist.lang;
import java.util.*;
import java.sql.*;
public class MainClass {
public static void main(String[] args) {
java.util.Date date = new java.util.Date();
//util, sql 패키지 둘다 date가 있어서 패키지 붙어서 사용하면 import 생략하도 가능
javax.swing.JFrame f = new javax.swing.JFrame(); //import 생략가능
}
}
1. java.lang
= Object
1) 최상위 클래스 => 모든 데이터형을 포함
class A
object obj = new A();
object obj = 10.5;
object[] obj = {new A(), 10.5, 100, 'A', "Hello"}
double[] d = {10.5, 'A', 100, 10.5F}
2) 모든 클래스(사용자 정의) => 상속을 내린다
=============== Object가 가지고 있는 모든 기능을 사용할 수 있다
3) 주요 기능(메소드)
clone() => prototype : 복제(메모리 복제)
class A {
int a = 10;
}
class B extends A {
// int a;
public B() {
this.a=100; // 자신의 클래스
super.a=200; // 상속을 내린 상위 클래스
}
}
상속
extends(단일 상속) ====> class로부터 상속
implements(다중 상속) => interface로부터 상속
클래스
1) new => 처음부터 시작
2) 참조 => 클래스 => 매개변수로 전송
메소드를 통해서 전송
3) 복제 => 변경된 것부터 시작
package com.sist.lang;
class A implements Cloneable{
int aa=10;
public A clone() {
A a = new A();
try {
a = (A)super.clone();
/*
* Object (double)
* A (int)
*
* double d = 10;
* int a = (int)10.5
* A a = (A)new Object()
*/
}catch(Exception e) {}
return a;
}
}
public class MainClass {
public static void main(String[] args) {
A a = new A();
a.aa=100;
A b = new A();
System.out.println(b.aa); // 10
// 별칭, 같은 메모리를 참조
A c = new A();
System.out.println(c.aa); // 10
c.aa=100;
A d = c; // 동일한 저장 장소를 가지고 있다
System.out.println(d.aa); // 100
d.aa=1000;
System.out.println(c.aa); // 1000
A e = c.clone();
System.out.println(e.aa); // 1000
}
}
class A {
int aa = 10;
}
A aaa = new A();
=> display(aaa); ==> aaa.aa => 1000 : Call By Reference (참조에 의한 호출)
(Call By Value (값에 의한 호출))
public void display(A a) {
a.aa = 1000;
}
* Call by value와 Call by reference
package com.sist.lang;
class Change{
int x,y;
/* 멤버변수들은 초기값을 갖고있다
* int => 0
* String => null
* class => null
* double => 0.0
* boolean => false
*/
}
// Change => x=0, y=0
public class MainClass2 {
public void swap2(Change c) {
int temp = c.x;
c.x = c.y;
c.y = temp;
}
public void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
}
public static void main(String[] args) {
MainClass2 m = new MainClass2();
int x = 10;
int y = 20;
System.out.println("변경전:x="+x+" y="+y); //변경전:x=10 y=20
m.swap(x,y);
System.out.println("변경후:x="+x+" y="+y); //변경후:x=10 y=20
//call by value 메모리가 다른 공간이라서 바뀌지 않음 일반변수가 넘어가면 (String은 일반변수 취급)
Change c = new Change();
c.x=10;
c.y=20;
System.out.println("변경전:x="+c.x+" y="+c.y); //변경전:x=10 y=20
m.swap2(c);
System.out.println("변경후:x="+c.x+" y="+c.y); //변경후:x=20 y=10
//call by reference 주소값을 참조하기 때문에 넘겨준 클래스가 바뀜 (String제외 나머지 클래스 다 바뀜)
}
}
package com.sist.lang;
class B{
int x,y;
}
public class MainClass3 {
public static void main(String[] args) {
// Call By Value => 값을 전송 ==> 매개변수 전송법 (메모리 다른 메모리)
int x=10;
int y=20;
int i=x;
int j=y;
int temp=i;
i=j;
j=temp;
System.out.println("x="+x+",y="+y); //x=10,y=20
System.out.println("i="+i+",j="+j); //i=20,j=10
// Call By Reference => 주소 전송
B b = new B();
b.x = 10;
b.y = 20;
B c = b; // 참조 => swap(B c) ==> swap(b)
c.x = 100;
c.y = 200;
System.out.println("b="+b); //b=com.sist.lang.B@15db9742
System.out.println("c="+c); //c=com.sist.lang.B@15db9742 메모리 주소가 동일
System.out.println(b.x); // 100
System.out.println(b.y); // 200
/*
* 매개변수 => class, 배열 ==> 원본 (->주소, 기존 값 변경됨)
* 매개변수 => 기본형 데이터, String ==> 복사본 (값 변경안됨)
* ==>
* 메모리(클래스) => 같이 사용 (참조)
* 메모리(클래스) => 이미 만들어진 클래스를 사용 => 복제 => clone()
* 메모리(클래스) => 새로운 내용(처음부터 사용) => new
*/
}
}
= String
= StringBuffer
= System
= Math
= Wrapper : 모든 데이터형을 사용하기 쉽게 클래스로 변경
Double => double
Byte => byte
Integer => int
Boolean => boolean
================ 박싱 / 언박싱
Integer i = 10; =>박싱
Integer i = new Interger(100); =>박싱
int k = i; => 언박싱
인터페이스
= 변수 => 상수형 변수 ===> public static final
int a =10;
= 메소드 => 추상메소드 => public abstract
void display();
구현이 안된 메소드 => 메모리 할당이 불가능
= 다중상속이 가능
= 서로 다른 클래스를 연결이 가능
extends
= 인터페이스 ======> 인터페이스 상속
implements
= 인터페이스 ======> 클래스 상속
package com.sist.lang;
// toString() => 클래스 객체를 문자열로 변환 String toString()
// clone => Object clone()
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.table.*;
public class MainClass4 extends JFrame{ //Window
JTable table;
DefaultTableModel model;
public MainClass4() {
String[] col = {"이름", "나이", "주소"};
String[][] row = new String[0][3]; //줄(추가시 add사용), 데이터
model = new DefaultTableModel(row, col) { //내용 <tr> <td></td> </tr>
// 메소드 재정의(Override) => 클릭시에 편집 방지
public boolean isCellEditable(int r, int c) {
return false;
}
//public void aaa() { //메소드 추가도 가능
//}
};
table = new JTable(model); //껍데기(화면디자인) MV패턴(모델,뷰) <table></table>
JScrollPane js = new JScrollPane(table);
add("Center",js);
for(int i=0; i<10; i++) {
String[] data = {"홍길동"+(i+1), "30", "서울"};
model.addRow(data);
}
// toString(), (String) 둘 중 하나 선택해서 문자열로 형변환
setSize(350, 400);
setVisible(true);
}
public static void main(String[] args) {
new MainClass4();
}
}
2. java.lang
1) Object (모든 데이터형을 받아서 저장)
- clone : Spring
- finalize() : 소멸자
package com.sist.lang;
class C{
public void display() {
System.out.println("C:display() Call...");
}
@Override //source - override Methods
protected void finalize() throws Throwable {
System.out.println("메모리 해제");
}
}
public class MainClass5 {
public static void main(String[] args) {
C c =new C();
c.display();
//소멸
c=null; //GC대상
System.gc();
}
}
- toString() : 문자열 변환
2) String
- trim() 공백제거
- substring() 문자자르기
- length() 문자길이
- indexOf() 문자찾기
- lastIndexOf()
- equals() 동일한지
- valueOf() 문자로 데이터형 변경
- contains() 포함
- startsWith()
- endsWith()
- replace()
3) Math
- random()
- ceil() => 올림 (페이지 나누기) => 오라클
4) System
- println()
- exit()
- gc()
5) StringBuffer
- 문자열 결합 => append()
6) Thread
- start(), run()
3. CGV
MovieVO (getter/setter)
package com.sist.cgv;
/*
블루 아워
예매율 8.7%
감독 : 하코타 유코
배우 : 카호 , 심은경
장르 : 드라마
기본 : 12세 이상, 092분, 일본
개봉 : 2020.07.22
*/
public class MovieVO {
private int mno; //영화 고유번호
private String title;
private String reserve;
private String director;
private String actor;
private String genre;
private String grade;
private String time;
private String from;
private String regdate;
private String story;
private String poster;
//읽기쓰기 되야함 getter/setter 캡슐화
public int getMno() {
return mno;
}
public void setMno(int mno) {
this.mno = mno;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getReserve() {
return reserve;
}
public void setReserve(String reserve) {
this.reserve = reserve;
}
public String getDirector() {
return director;
}
public void setDirector(String director) {
this.director = director;
}
public String getActor() {
return actor;
}
public void setActor(String actor) {
this.actor = actor;
}
public String getGenre() {
return genre;
}
public void setGenre(String genre) {
this.genre = genre;
}
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
this.grade = grade;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
public String getRegdate() {
return regdate;
}
public void setRegdate(String regdate) {
this.regdate = regdate;
}
public String getStory() {
return story;
}
public void setStory(String story) {
this.story = story;
}
public String getPoster() {
return poster;
}
public void setPoster(String poster) {
this.poster = poster;
}
}
MovieManager (데이터 긁어오기 Build Path - External JARs - Jsoup)
package com.sist.cgv;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class MovieManager {
static MovieVO[] movies = new MovieVO[7]; //데이터 채워오기
static {
try {
Document doc = Jsoup.connect("http://www.cgv.co.kr/movies/").get();
Elements link = doc.select("div.box-contents a");
int j = 0;
for(int i=0; i<7; i++) {
movies[i] = new MovieVO();
// <a href="/movies/detail-view/?midx=83160"></a> => attr()
// <a>aaaa</a> => text()
//System.out.println("http://www.cgv.co.kr"+link.get(j).attr("href"));
Document doc2 = Jsoup.connect("http://www.cgv.co.kr"+link.get(j).attr("href")).get();
Element title = doc2.selectFirst("div.title strong");//(Element 하나씩 가져옴)
//select().get(0);
Element poster = doc2.selectFirst("span.thumb-image img");
Element grade = doc2.selectFirst("span.ico-grade");
Element reserve = doc2.selectFirst("strong.percent span");
// Elements dt = doc2.select("div.spec dd");
// for(int k=0; k<dt.size(); k++) {
// System.out.println("==========");
// System.out.println(dt.get(k).text());
// System.out.println("==========");
// }
Element director = doc2.select("div.spec dd").get(0);
//System.out.println(director.text());
movies[i].setDirector(director.text());
Element actor=doc2.select("div.spec dd").get(2);
//1번 프로듀서는 없는영화도있고 있는영화도 있는데 없는 영화는 공백으로 처리되어 있어서 2번 사용함
//System.out.println(actor.text());
movies[i].setActor(actor.text());
Element etc=doc2.select("div.spec dd").get(4);
//System.out.println(etc.text());
String[] temp = etc.text().split(","); //전체, 124분, 이탈리아
movies[i].setTime(temp[1].trim()); // 124분
movies[i].setFrom(temp[2].trim()); // 이탈리아
Element regdate=doc2.select("div.spec dd").get(5);
//System.out.println(regdate.text());
movies[i].setRegdate(regdate.text());
if(i==0) { //반도만 프로듀서가 있어서 0번(반도)
Element genre = doc2.select("div.spec dt").get(3);
//System.out.println(genre.text());;
movies[i].setGenre(genre.text().substring(genre.text().indexOf(":")+1).trim());
//(장르 : )자르기
}
else {
Element genre = doc2.select("div.spec dt").get(2);
//System.out.println(genre.text());;
movies[i].setGenre(genre.text().substring(genre.text().indexOf(":")+1).trim());
}
//System.out.println(title.text());
movies[i].setTitle(title.text());
//System.out.println(poster.attr("src"));
movies[i].setPoster(poster.attr("src"));
//System.out.println(grade.text());
movies[i].setGrade(grade.text());
//System.out.println(reserve.text());
movies[i].setReserve(reserve.text());
movies[i].setMno(i+1); //영화번호
Element story = doc2.selectFirst("div.sect-story-movie");
movies[i].setStory(story.text());
j+=2;
}
}catch(Exception ex) {}
}
public static void main(String[] args) {
// MovieManager m = new MovieManager();
// for(MovieVO vo : movies) {
// System.out.println("================");
// System.out.println("영화번호:"+vo.getMno());
// System.out.println("제목:"+vo.getTitle());
// System.out.println("감독:"+vo.getDirector());
// System.out.println("출연:"+vo.getActor());
// System.out.println("장르:"+vo.getGenre());
// System.out.println("등급:"+vo.getGrade());
// System.out.println("상영시간:"+vo.getTime());
// System.out.println("국가:"+vo.getFrom());
// System.out.println("상영일:"+vo.getRegdate());
// System.out.println("예매일:"+vo.getReserve());
// System.out.println("줄거리:"+vo.getStory());
// }
}
}
MovieListPanel
package com.sist.cgv;
import java.awt.*;
import javax.swing.*;
import java.net.*;
public class MovieListPanel extends JPanel{
JLabel[] poster = new JLabel[7];
public MovieListPanel() {
MovieVO[] movies = MovieManager.movies; //MovieManager의 static 자동호출
setLayout(null);
JPanel p = new JPanel();
p.setLayout(new GridLayout(1,7,5,5)); //한줄에 7개 간격5
int i = 0;
for(MovieVO vo : movies) {
try { //그림파일 외부에서 가져오므로 예외처리
URL url = new URL(vo.getPoster());
poster[i] = new JLabel();
p.add(poster[i]);
Image ii = getImage(new ImageIcon(url),
105, 200);
poster[i].setIcon(new ImageIcon(ii));
i++;
}catch(Exception ex){}
}
setLayout(null);
p.setBounds(10, 15, 760, 300);
add(p);
}
public static Image getImage(ImageIcon ii, int w, int h) { //크기 맞게 맞춰줌
Image dimg = ii.getImage().getScaledInstance(w, h,
Image.SCALE_SMOOTH);
return dimg;
}
}
CGVMainFrame
package com.sist.cgv;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class CGVMainFrame extends JFrame{ //윈도우창에
CardLayout card = new CardLayout();
MovieListPanel mp = new MovieListPanel();
public CGVMainFrame() {
setLayout(card);
add("MP",mp);
setSize(800, 600);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE); //메모리 누적 방지
}
public static void main(String[] args) {
new CGVMainFrame();
}
}
'Back-end > Java' 카테고리의 다른 글
JAVA의 정석 30일차 - java.util, calendar, collection (0) | 2020.07.24 |
---|---|
JAVA의 정석 29일차 - String, StringBuffer, Math, Wrapper (0) | 2020.07.23 |
JAVA의 정석 27일차 - 예외회피 (0) | 2020.07.21 |
JAVA의 정석 26일차 - 예외처리 (0) | 2020.07.20 |
JAVA의 정석 25일차 - Layout (0) | 2020.07.17 |