복습
- 프로그램 구조
Model-View-Controller
View
- Aggregation Hierarchy
- Specialization Hierachy
Menu Bar toolBar
메뉴바랑 툴바 만들기(한줄씩쓰면 된다.)
mainpanel이야.
작업하는 프로그램 eclipse나 ea 기본적인 패턴이 다 이렇게 생김
왼쪽에는 directory
강좌는 더블클릭 해서 들어가. 미리담기해서 어떡하나. 전체선택해서 보낼 수도 있고 이런 프로그램을 짜는거야
View - Main Frame /// Login Dialog
Menu Bar / Tool Bar / Main Panel 을 Main Frame이 포함함
사람은 표유류다 포유류는 동물의 일종이다. 그렇지. 승용차는 자도앛의 일종이다.
종류와 포함관계의 차이에 대해서 보고서를 찾아라.
이렇게 추리구조를 만드는데 종류는 뭐야. 하나의 종류다. 이게 종류가 어떤 것이다.
포함관계는 어떻게 되겠어. 이것을 모아서 연결하면 전체가 만드러지는거야.
사람은 포유류의 일종이지, 아시아인종은 사람의 일종이다. 그런데 사람은 눈코귀입으로 구성된다. 이런거는 잘못된 이야기다. 때로는 그것을 헷갈릴 때가 굉장히 많다.
그러니까 종류와 참조할게 뭐냐면
Agrregation Hierachy
Main Frame 이 사람 / Menu Bar, Tool Bar MainFrame이 흑인,백인,황인 같은 개념이다.
종류라는 것은 얘네들을 일반화시킨 것이 위로 올라간다. 이것들을 일반화해서 백인종은 사람중에서 얼굴이 더 하얗네 이걸 트고하하는거야 흑인은 까만애, 황인은 누런애
이런 특수한거야.
Aggregation Hierachy와 (C.F)
Specialization Hierachy 를 비교
C.F가 뭔지도 찾아봐
char 가 character
int가 정수, float 실수
찾아서 외워야하고 알아야할거아니야. 그렇게 멍하니 보고 있다가 aggregation이 무슨뜻인가?
Aggregation - 집합
Hierarchy - 구조
영어는 원문으로 들어가. 대부분이 영어단어를 쓴다고 번역안해.
컴퓨터 용어의 영어를 잘 찾아봐라. 단어 많이 알고 technical reading을 많이 해야돼 menual을 알아야한다.
뭐가 어려워 단어가 어렵다.
여기 있는 단어 다 찾아와
Specialization의 반대 -> General
특화라는 것은 뭔가가 추가 되는거야. 사람이나 Frame
자동차 - suv, 승용차, 버스
suv, 승요앛, 버스 -> 하단 속성을 더 가지고 있다. 좀더 추가된거야. 그것을 특수하다고 한다.
특수하다는 것은 공통에 뭔가가 추가된 것이다. 거꾸로 얘기하면 Generalization
내려가는 것이 상속이다. 어느 부분이 상속되겠어
자동차가 이 셋의 공통부분을 가지고 있다. 이미 자동차라는 것이 suv, 승용차, 버스으 ㅣ공용이다.
실제 사람은 없다. 실제 사람이 존재하진 않는다. 이것은 개념적인 문제다. 오른쪽은 실체이며 전혀 다른 것이다.
type라는 것은 실제로 존재하지 않아. 일반화 시켜놓은 우리의 개념이야 일반명사는 사람이 있어? 없잖아. 사람이 없잖아 홍길동은 있잖아 너네들이 다르잖아. 너네들이 존재하지만 사람이라는 것이 있나? 전혀다른거야
고유명사는 실체고 일반명사는 type이야.
type을 쓴 이유가 뭐야. 붕어빵 기계를 만들어 내는 것이ㅣ genetic
type은 실체를 만들어 내는 틀이다.
integer x 하면 x를 만들어내면 integer로 만드는거야
new그러면 type이 나온다고 했지, type보고 붕어빵을 만들어내라 new라는 것은
new하면 실체가 나온다. 붕어빵만 찍어낸다. 뒤에 뭐가 있냐면 이것은 붕어빵일수도있고 잉어빵일수도있고 만드는 것이 다를거아니야. type이라는 것이 실체를 찍어내며 그래서 뭐가 하나 만들어진다.
생각을 재사용한다고 그러니까 우리는 머릿속이 내용을 많이 기억하고 있지 않다. 아주 작은양으로 기억한다. 우리머릿속이
이런 구조가 없으면 처음부터 다 기억해야 하기때문에 무식하다.
체계적으로 생각해서 아주 최소한의 기억으로 산다.
어떻게 다외워 이걸. 머리를 정리하면 세상이 점점 명확해지고
바보는 하루종일 공부해도 아무것도 모른다. 머릿속에 쓰레기
프로그램에서 배워야하는 것은 프로그램의 기술도 중요하다 swing도 자바도 있고
왼쪽은 공통성과 특화 이것을 확장해서 다른말로 확장한다고 해.
밑으로 내려가면 확장하잖아. suv는 자동차에 특성까지 포함된다. 이것을 상속이라고 학디ㅗ 하고 extend ㅈ ㅏ바에서는 확장한다고 하고 머릿속에서는ㅇ ㅣ걸 특화한다고 한다.
확장과 상속과 특화는 거의 같은 뜻이야. 자바에서 쓸 때에는 같은 뜻으로 쓴다. 객체지향 언어에서는 그렇다.
Mainframe에 LoginDialog를 만든다.
코딩을 해보면 view
// 객체지향에서는 type과 실체가 있다.
Type -> Instance
붕어빵 틀 이러면 Type
Instance는 붕어빵
프로그램 세상에서는 어떻게 만들어내냐면 붕어빵에 new하면 만든다.
거기다 이름을 붙인다. 붕어빵1, 또 new할 수 있어 그러면 붕어빵2 그러면 Instance륾 ㅜ한대로 만들 수 있다.
Instantiation : Type - (new) -> Instance
객체지향 프로그래밍
- Class -> Object
객체지향 프로그램에서만 Class와 Object라고 한다.
- 예외: Primitive Type
int/float/char/boolean (new없이 그냥 만들 수 있다)
Ex. int x; // 기본적인 타입, 원래 존재하고 제공하는 기본적인 타입이다.
integer x = new integer ();
프로그램의 결론은 어떤 학문의 분야나 뭔가의 특정 분야가 있다고 하면 단어의 정의를 만든거야. Intelligence라는 것 자체가 단어라는 거야. 원자 장자 등
은행에서 대출상품, 입금, 출금 이게 다 단어란 말이ㅑㅇ. 니네들이 하는거는 class를 결국 만드는거야
그걸 다시 연결하는거야. Class를 만들어서 다시 연결하는거야
앞으로 이 이름은 MainFrame로만 쓰겠다고.
int x ;
x = 4;
x = abs // 에러
프로그램할 때, x = new Integer() ; 이렇게 써도돼
긂 x를 뭐어떻게 했는지, 헷갈려 그래서
MainFrame mainFrame = new MainFrame() ; //바인딩, 클래스를 가지고 object를 만드는 것이다.
이게 object라고 new해서 mainframe간다고. 그 이름을 MainFrame이라고 한다.
MainFrame은 object를 연결하는거야. 실체일수도 있고 이름일 수도 있따. 홍길동이 예를들어서 이름이야.
홍길동 이러면 사람일수도있지만 홍길동 자모가 ㅎㄱㅁ 이렇게 말할 수도 있따. 그러면 예는 메모리 어디다 만들어놨는지 주소 찾는다.
글자 mainframe 주소, 실체 이 3가지 의미를 가진다. 니네들도 마찬가지야.니네들도 이름이 있어 홍길동이야 그 글자를 얘기할수도있고 너희를 얘기할수도 있어.
private를 쓰면 얘는 계쏙 바깥으로 내쫓겠다. 계쏙 쓰겠다. 색깔이 변했찌?
그러고 자식으로 쓸 떄에는 this를 쓴다. 얘는 이 함수 끝나도 없어지지말고 있어라! 이 안에다 집어넣으면
new를 하면
이안에서 new를 했지 객체의 생명주기라고 햇는데 new라는 것이 때가되면 사망해야되는거아니야 얘 life사이클은 {} 사이에서 사라지는거야 이해됐나
이 수강신청 패널을 이렇게 만들면 }에서 끝난다.
그런데 없어지려고 하기전에 부모에게 달아났어
this.add라고 부모에게 등록을 해서 이게 없었으면
new를 했지 얘를 아는애가 얘빢에 없어. 이 함수가 끝나면 sugangsincheongPanel을 사라져
얘를 아는애가 없으면 자동으로 삭제되는데
하단에 this.add(sugangsincheongPanel,BorderLayout.CENTER);
this가 부모 this.add했기에 사라지지 않아.
private SugangsincheongPanel ~ ' 만들면 private는 이 객체가 생겨나서 죽을 떄까지 같이 있어
this.add나 private SugangsincheongPanel sugangsincheongPanel;이런거랑 똑같아
public class JFrame { } 누가 만든걸 이걸 쓰는거잖아.
만들었는데 여기서 add라는 것이 뭐냐면 내가 이런 함수를 만든적이 mainframe에서 업서
JFrame이 가지고 있다 이 함수를. this.add()하면 세팅을하는거야
this.add() { this.sugangsincheongPAnel = }
JFrame이 누군가가 를 만들어냈다고 여기서 new를 하고 수강신청 패널이 없어도 얘는 라이프사이클이 계쏙 유지된다. private로 놨따.
private SugangsincheongPAnel sugangsincheongPanel;이런거다.
달아났기 달아났는데 어떻게 이름을 해야할지 모르겠어 그래서 실제로 두번 달아놓은거야
private 하고
this했으니까!
mainpanel만들어서 dialog를 만들어서 띄어라!
얘 지속되는 자식이 아니니까 바깥으로 안빼도 될거같아 .
얘는 자식으로 등록도 안해놨찌 그려라하고 끝내버렸잖아. 이유가 뭐냐면
내가 만약에 aggregation이 부모한테 add라는 함수를 쓴다.
윈도우가 JFrame에게 그리라고 명령을 한다. 그러면 JFrame은 어디까지아냐면 ~만큼 알고 있다. 어떻게 할지 모른다고. 내가 프로그램 짜야하는거거든 paint를 하면 누가 명령을 내리냐면 윈도우가 내린다. 이게 무슨 얘기냐면 내가 이렇게 minimize를 시켜 그러면 내프로그램을 이벤트를 못받아 window로 돌아가버리는거라고
여기다 window로 돌아가는거야 그러다가 여기 maximize를 딱하면 이 윈도우가 내 프레임 JFrame에 paint하라고 명령을 내리는거다. 그게 끝이다. 그리고 내 프로그램을 그려야한다. 얘가 paint명령을 내리면
자식을 add로 등록했지 add하는게 자식으로 등록하는거야. 이렇게 add하는순간 mainframe을 등록하는거야. 이렇게 코드봤찌?
코드아까보면 JFrame이 add를 하면 자식으로 다 달아놓는다고. 닫아놓는것은 paint
자식들 다 모아놓고 너도 그려너도그려 이렇게 하나씩 명령을 준다고. 이해됐나
paint paint한다고 main에 Directory집어넣어
또 이안에 뭐집어넣어 미리담기 집어넣을거야.
Directory 미리담기, 수강신청
mainPanel 에 -> directory,미리담기,수강신청
얘가 미리 프로그램을 짜놨는데 우리가 모르는거야 이미 다 짜놨어
자식을 add하는거야.
this.add하면서 수강신청 패널 만들어서 mainframe에 자식으로 등록하는거야.
ㅇ
이게 paint 전체를 가능하게 만든다고. 얘까 사람이 처음에 들으면 뭘하면 눈한테 얘끼 심장한테 얘끼 심장이 또 우심방 좌심방 이런식으로 내려가는거야. 이게 aggregation hierachy를 만드는 이유이다.
view가 아주 전형적인 aggregation의 예다.
윈도우 입장에서는 application의 최상위의 명령권자에게 얘기를 하면 명령을 내릴 때 다 구체적으로 하나씩 내리는 것이 아닌 제일 위에 있는 대장에게만 얘끼하면 대장이 중간관리자 그런애들한테 계속 명령을 내려가는 것이다. 그런 체계를 만들기 위해서 체계구조의 명령 체계를 만들기 위해서 집합 계층구조를 만든 것이다. 됐나? 알았어?
상속구조는 소스코드를 재사용이야.
여기나온것처럼 우리가 JFRame을 확장해서 소스코드를 그만큼 추가한거야. JFrame이라는 소스코드는 엄청나 천줄도 넘을거야.
그러면 extends로 천줄을 그대로 쓸수있는거야 layout이런거뭐야 나잖아.
aggregation
swing에 view object우리가 뭐는 했어? 그림그리는 것 까지 했지. ueser interface라는 것은 뭐있어야돼
input을 받아야할거야 사용자와 상호작용 해야되는거아니야. 우리에게 오감을 통해서 뭔가를 소리를내고 냄새나 맛은 안된다고했찌 내가 여기를 핥아.?아니잖아
여기서 시각적정보,청각적,촉각적, 예를들어 진동같은것이 촉각적인거야
시각,촉각, 대부분이 촉각이다. 마우스는 키보드나 제스처라고 punch를하고 이런거 있잖아
user event를 받고 mouseEvent를 받고 카메라를 통해ㅓ 이미지 정보도 받는다 내가 누군지 스마트폰에서 확인을할거아니야 얼굴을보고 인증을하지 이미지 관리하지 목소리가지고 하는거없지?목소리는없지 하여튼 좋아
내가 마우스를 이렇게 움직이지 마우스를 이렇게 되면 프로그램이두개떠있잖아 두개뿐만 아니라 10개도 뜰수 있는거야. 그러면 event를 누구에게 전달할지 어떻게 알아 일단은 최상위에 있는 window에게 전달을 한다고
최상위window가 이렇게 움지깅면 이 움직이는 정보가 applicaiton에 들어가 있다고. 마우스 버튼이 다운하거나 니들 안보여서 그렇지 아무짓도안하니까 가만히 있지 마우스 이벤트 하나만보면 이것도 몽땅다 JFRame에 들어가있다고
userevent가 실제로 이렇게 들어간다고. 그럼이게또 어떻게되겠어 이렇게 들어가면 JFrame에 갈거아니야. 얘네들이 자동으로 된느거같아? 실제로 다 그리는거야 그렷다가 지우고 움직이고 또그렷다가 이안에서 미친짓을 하는거야. 이안에서 엄청나게 한느거야. 뭐자동으로되는거같지?쉴드를그리고하얗게다시그리고 백그라운드 그리고 또그리고 지우고 이렇게 하는거야 이렇게 그림을 그리잖아. 이게 늘어나느거같아? 아니지 니네가 나중에 하면 그리고 지우고 그리고 지우고 하는거야.이만큼한거면 수백번지우고하는거야.
event를 받으면 mainframe은 일루 들어왔지 이 셋중에서 이벤트 어디로 가겠어 이게 toolbar야 여기에는 버튼이 20개 들어있어 tool bar에 자식이 20개정도 들어가있어 tool bar에 이벤트를 주면 이 자식에게 물어봐. 마우스 포인터에 위치가 합쳐서
j가붙은거는 userenterface에 들어간 user가 변화야 마우스도 아니고 키보드도 아니고 userEvent가 발생하는 처리할 수 있어야 하고. 또하나는 여기나오는 화면에다가 paint를 할 수 있어야돼
this.setModal(true);는 뒤에 안나오게 클릭이 나오게 modal만들고
절대좌표를 500에 200 이렇게 하면 안돼. 모니터 사이즈를 알아야할거아니야.
자바에 화면 중앙에 띄우는 것
Dimension size = ToolKit.getDefaultToolkit (). getScreenSize();
this.setLocation(size.width/2 - this.getWidth()/2, 20);
//구조체인데
this.setSize(400,600)
shift control 5를 누르면 된다.
조정을하고
ok, cancel이 있어야돼 channel layout을 잡기위한 channel이 3개 있어야돼 20에 30 절대좌표 쓰지마 하지만 성능은 좋아
성능때문에 그렇게하면 계산은 다시해 Logindialog야 뭐
Logindialog이쁘게 만들어봐라
과제: Code Refactoring (가능하면 로그인을 SLogin까지 연동을해라)
하고 Logindiaglog를 Panel을 사용해서 Layout맞추기
S Login연동
mainframe에 누구씨 안녕하세요 이런거 만들라고 Main Frame과 연동해서 인사말 쓰기
~님 환영하빈다 이런거 만드는거야 이게 파일을 찾아온거라고 여기다 연결을 해서 이 이름을 연결.
그런데 얘는 가끔씩 시도떄도 없이 나온다. 특수하기 떄문에 얘는 자식으로 등록하진 않아. 얘는 거꾸로 되어있어
부모만 잊어먹지말아라. 내가 니 부모다 이걸 알려주는거다.
부모가 죽으면 따라 죽긴 한다. 두개는 다른 윈도우다 자식 윈도우가 아니며 다른 윈도우다 특수하다.
우리가 type을 만들어야 하는데
붕어빵 기계를 만들어야 우리가 붕어빵 장사를 해야할거아니야. 볼트도있고 너트도 있고 쇠도 있어야하고 여기다 필요한게 많잖아. 그러니까 아무것도 없는데 어떻게 만들어. 가장 기본적인 재료를 만들어야겠지.
'JAVA_School > JAVA_School_class' 카테고리의 다른 글
[1102] 객체지향적사고와프로그래밍 (0) | 2022.11.02 |
---|---|
[1031] 객체지향적사고와프로그래밍 (1) | 2022.10.31 |
[1019] 객체지향적사고와프로그래밍 (0) | 2022.10.19 |
[1017] 객체지향적사고와프로그래밍 (0) | 2022.10.17 |
[1012] 객체지향적사고와프로그래밍 (4) | 2022.10.12 |