오픈프레임워크_Day05
### : 목차 구분 기호
--- : 목차 내에 항목 구분 기호
목차
1. 이론 및 정보
2. 설정 및 그 밖에
3. 소스코드
4. 과제
###################################
1. 이론 및 정보
-----------------------------------
CLASS
1. 묶음
- 인스턴스 변수, 메서드
2. 최소 단위(캡슐화 단위)
3. 설계도(추상적)//가장 중요함!
- 인스턴스(Instance 클래스를 가지고 실제로 만든 것, 메모리 공간, 실제 메모리 데이터, 메모리 복사본)
4. 사용자 정의 데이터타입(User Define DataType)
1) Built-in DataType(비 객체형 데이터 타입 - 반드시 값만 저장, 메모리 주소 저장X)
byte short int long double float char boolean
2) User Define DataType(객체형 데이터 타입 - 반드시 주소만 저장)
class로 구현
클래스를 모델로 만들어진게 인스터스!!
모든 클래스는 인스턴스를 생성해야지 사용가능
이유는 설계도로 만들지 않고 사용가능한가를 생각해보면됨
회사에 취직했는데 작업할 공간이 없어! 그럼 어떤가?
5. 객체(Object) - 모든 객체가 클래스는 아니다?, 클래스를 객체라고도 부른다
실제존재하는 물체, 객체 -> 일반적인 의미
하나하나의 독립적인 기능! -> 객체
기능을 분리 할 수 있는 개념 -> 객체
다른 곳에서도 분리하고 합칠 수 있는 개념 -> 객체
프로그램을 만드는데 있어서 하나의 독립적인 개념 -> 객체
OOP - 객체지향언어
구조적(절차적)
C, DOS
두개의 언어 방식의 차이는 운영체제의 변화에 따름
문자 방식의 도스 운영체제 , 혼자 프로그램을 짰음
OOP
C++, JAVA, C#
팀단위 프로그램, 쪼갤수 있는 형태임 유리함 -> 객체 등장
객체의 세가지 자격,특성, 객체가 되기 위한 조건
1) 상속성(inheritance) : 재사용 및 확장!! 용이
2) 다형성(polymorphism) :
3) 캡슐화, 추상화(encapsulation)
- 원자성(더 이상 쪼갤 수 없음)
- 편의성
- 보안성
자바는 이 세가지에 특성에 의해서 구성되어 있기 때문에
그 연관성을 생각하며 공부해야 한다.
자바 문법에 큰 줄기가 된다.
-----------------------------------
. 의 의미
- 접근 경로, 접근도구, 접근자
-----------------------------------
메서드 안에서 생성된 변수는 다름
-----------------------------------
변수
1. 무엇을 저장하느냐
1) 값 : 변수
2) 주소 : 참조변수
2. 선언된 위치
1) 클래스 : 인스턴스 변수
2) 메서드 : 변수
-----------------------------------
*메서드(method)
1. 동작을 구현하는 역할
2. 만드는 법
반환형 메서드이름(...){
하고 싶은 일 작성
}
3. 사용하는 법
반드시 호출해야 한다.
메서드이름(...);
4. 호출방식
1) 인자(인수)가 없는 방식
2) 인자가 있는 방식
3) 리턴값이 있는 방식
-----------------------------------
모듈화
특정 기능을 따로 분리하는 기능
최소단위는 메서드
-----------------------------------
실인자
값, 변수
실인자는 메서드 호출할때 넘겨주는 값
-----------------------------------
매개변수
메서드를 만들때 선언된 변수
실인자 값을 받는 변수
-----------------------------------
return 기능
1) 메서드 복귀 할 때 리턴 값 반환(1개만 반환 가능)
2) 메서드 강제 종료
-----------------------------------
객체지향언어에서만 가질 수 있는 메서드의 특징
1. 다형성 : 메서드의 오버로딩(Overloading) : 중복정의 , 비슷한 기능을 하는 것끼리 해야 효과가 극대화
2. 생성자 메서드 (Constructor)
1) 모든 클래스에 반드시 존재하는 메서드
: 기본 생성(default constructor)
2) 반환형이 없다.(일회용)
: 단 한번만 호출 가능
3) 메서드명은 반드시 클래스명과 동일하게 작성
4) 반드시 인스턴스가 생성될 때만 호출 가능
5) 초기화
6) 임의의 생성자를 만들게 되면 (인자가 있는 생성자)
더 이상 기본 생성자는 제공되지 않는다.
7) 인스턴스 변수의 자동 초기화
3. this
-----------------------------------
기본 생성자는 항상 명시하라!!!!!
-----------------------------------
Gabage Collection(주소를 잃어버린 메모리공간)
자동으로 해주는데 사용자가 청소를 부탁할 수 있음
System.gc();
main 메서드는 시스템에 호출당해서 실행
이렇게 시스템에게 호출당해서 실행되는 메서드는
callback 메서드
finalize() 메서드 - callback 메서드의 일종
가비지가 수거되서 사라지기 직전에 호출됨
혹시나 가비지 공간에 마무리가 제대로 안된 점이 있으면
finalize()에서 처리가 가능
인스턴스가 사라지기 직전에 호출되는 메서드
한글 프로그램이 x 누른다고 바로 안꺼지고 물어보는 것처럼
finalize() 용도가 이러한 용도
하지만 오늘은 변칙적으로 사용해볼려고 함
finalize()가 실행중이라면 가비지 컬렉션이 실행중임을
알 수 있음
java.lang.System.finalize 에서 기본 구조를 확인
-----------------------------------
this (자바에서 만든 변수)
1. 참조 변수
2. 현재 실행 중인 인스턴스의 주소를 저장
3. read only
4. 클래스의 모든 메서드(static 붙은 메서드는 예외)는 반드시 이 참조변수를 인수로 가지고 있다
this() - 거의 쓸일 없지만
1. 현재 실행중인 생성자를 호출
-----------------------------------
-----------------------------------
-----------------------------------
###################################
2. 설정 및 그 밖에
-----------------------------------
###################################
3. 소스코드
-----------------------------------
day03에 했던 내용 이어서
class ClassDemo1{
int i;
double d;
}//클래스
public class ClassTest1{
int x;
public static void main(String[] args) {
ClassDemo1 obj = new ClassDemo1();//인스턴스 생성, 12byte
//obj 는 참조변수, 주소를 저장
obj.i = 10;
obj.d = 3.14;
System.out.println(obj.i+", "+obj.d);
ClassDemo1 obj1 = new ClassDemo1();
obj1.i = 20;
obj1.d = 3.5;
System.out.println(obj1.i+", "+obj1.d);
ClassDemo1 obj2 = obj1;
obj2.i = 200;
System.out.println(obj1.i);
obj = obj2;
System.out.println(obj.i);
/*
x = 1000;
System.out.println(x);
*/
//ClassTest1의 인스턴스를 생성해야지 변수와 메서드를 사용
//모든 클래스는 인스턴스를 생성해야지 사용가능
ClassTest1 self = new ClassTest1();
self.x = 1000;
System.out.println(self.x);
}
}
-----------------------------------
public class MethodTest1{
public static void main(String[] args) {
System.out.println("********************************************");
System.out.println(" 채팅프로그램");
System.out.println("********************************************");
System.out.println("1. 방만들기");
System.out.println("2. 초대하기");
System.out.println("3. 나가기");
System.out.println("********************************************");
}
}
-----------------------------------
public class MethodTest1{
void line(int length, char style){
for(int cnt=0;cnt<length;cnt++){
System.out.print(style);
}
System.out.println();
}
public static void main(String[] args) {
MethodTest1 obj = new MethodTest1();
//System.out.println("********************************************");
//수정할 일이 없는 것들은 보통 메서드로 만들지 않아도 됨
obj.line(40, '-');//모듈화, 메서드 호출, 인터럽트 발생
System.out.println(" 채팅프로그램");
//System.out.println("********************************************");
obj.line(50,'%');//모듈화, 메서드 호출, 왔다 갔다 거리에 대한 비용이 발생
System.out.println("1. 방만들기");
System.out.println("2. 초대하기");
System.out.println("3. 나가기");
//System.out.println("********************************************");
obj.line(45,'+');//모듈화, 메서드 호출, 안에 들어가는 값, 변수 = 실인자
}
}
-----------------------------------
public class MethodTest2{
int hap(int num1, int num2){
return num1+num2;
}
public static void main(String[] args) {
int num1 = 10, num2 = 7;
MethodTest2 obj = new MethodTest2();
System.out.println("두 수의 합계");
System.out.println("결과 : " + obj.hap(num1,num2));
}
}
-----------------------------------
public class MethodTest3 {
void display(){
System.out.println("전달 내용이 없습니다.");
}
void display(int i){
System.out.println(i);
}
void display(int i, int j){
System.out.println(i+", "+j);
}
void display(double d){
System.out.println(d);
}
public static void main(String[] args) {
MethodTest3 obj = new MethodTest3();
obj.display();
obj.display(3);
obj.display(5,6);
obj.display(3.145555);
}
}
-----------------------------------
class ConsDemo1{
int iValue;
double dValue;
ConsDemo1(){
}
ConsDemo1(int i, double d){
iValue = i;
dValue = d;
}
}
public class ConsTest1{
public static void main(String[] args) {
ConsDemo1 cd1 = new ConsDemo1();
System.out.println(cd1.iValue+", "+cd1.dValue);
}
}
/*
class ConsDemo1{
int iValue;
double dValue;
ConsDemo1(){
iValue = 10;
dValue = 3.14;
}
void setValue(int i, double d){
//여기에서 값의 유효성을 검사코드 작성 가능
iValue = i;
dValue = d;
}
}
public class ConsTest1{
public static void main(String[] args) {
ConsDemo1 cd1 = new ConsDemo1();
//cd1.iValue = 10;
//cd1.dValue = 3.14;
//cd1.setValue(10,3.14);
System.out.println(cd1.iValue+", "+cd1.dValue);
}
}
*/
-----------------------------------
class FDemo{
//cnt는 몇번째 인스턴스 인지 확인하기 위해서 사용
int cnt;
FDemo(int c){
cnt = c;
}
//api doc에서 복사해옴
protected void finalize(){
System.out.println("가비지 컬렉션 실행 : "+cnt);
}
}
public class FinalizeTest {
public static void main(String[] args) {
for(int i=0; i<1000000; i++){
new FDemo(i);//쓰레기 생성
}
}
}
-----------------------------------
class FDemo{
//cnt는 몇번째 인스턴스 인지 확인하기 위해서 사용
int cnt;
FDemo(int c){
cnt = c;
}
//api doc에서 복사해옴
protected void finalize(){
System.out.println("가비지 컬렉션 실행 : "+cnt);
}
}
public class FinalizeTest {
public static void main(String[] args) {
for(int i=0; i<1000000; i++){
new FDemo(i);//쓰레기 생성
}
}
}
-----------------------------------
public class ThisTest1{
int iVal;
double dVal;
//ThisTest1(this, int i, double d){
ThisTest1(int iVal,double dVal){
this.iVal = iVal;
this.dVal = dVal;
}
//void display(this){
void display(){
System.out.println(this.iVal+", "+this.dVal);
}
public static void main(String[] args) {
//ThisTest1 ob1 = new ThisTest1(주소,10, 10.0); //원래는 인자가 세개임 자신의 주소
ThisTest1 ob1 = new ThisTest1(10, 10.0);
ThisTest1 ob2 = new ThisTest1(20, 20.0);
ThisTest1 ob3 = new ThisTest1(30, 30.0);
//메서드에는 눈에 보이지 않는 매개변수 this가 존재
//ob1.display(주소);
ob1.display();
ob2.display();
ob3.display();
}
}
-----------------------------------
public class ThisTest2 {
int iVal; double dVal;
ThisTest2(){
//iVal = 10; dVal = 10.0;
this(10,10.0);
}
ThisTest2(int iVal){
//this.iVal = iVal;
this(iVal, 0.0);
}
ThisTest2(double dVal){
//this.dVal = dVal;
this(0, dVal);
}
ThisTest2(int iVal, double dVal){
this.iVal = iVal; this.dVal = dVal;
}
void display(){
System.out.println(this.iVal+", "+this.dVal);
}
public static void main(String[] args) {
ThisTest2 ob1 = new ThisTest2(100);
ThisTest2 ob2 = new ThisTest2(10.0);
ThisTest2 ob3 = new ThisTest2(200,20.0);
ThisTest2 ob4 = new ThisTest2();
ob1.display();
ob2.display();
ob3.display();
ob4.display();
}
}
-----------------------------------
###################################
4. 과제
-----------------------------------
- 주말에 지금까지 예제들 메서드로 개선
- 도움말 시스템을 클래스로 설계
-----------------------------------