728x90

2. 클래스와 객체

- 인스턴스 변수 : 객체에서 자신에 대해 아는 것

- 메소드 : 객체에서 자신이 하는 것. 인스턴스란 객체를 부르는 다른이름.

- main 메소드의 두가지  용도 : 클래스를 테스트 하기 위한 용도, 자바 에플리케이션을 시작하기 위한 용도.

- 자바의 청소

자바는 객체가 만들어지면 힙이라는 메모리 공간에 저장 - 가비지 컬렉션 기능이 있는 힙

JVM에서 어떤 객체가 절대로 다시 쓰이지 않을 것이라 생각되면 가비지 컬렉션대상이 됨.

- 나는 누구일까요?

.java파일 컴파일 하면 ? 클래스

내 인스턴스 변수의 값은 다른 친구의 값과 다를 수 있습니다 .? 객체

템플릿 같은 역할 ? 클래스

저는 무너가 하는 것을 좋아합니다 ? 객체 메소드

저는 메소드 여러개를 가질 수 있습니다. ? 클래스 객체

저는 상태를 나타냅니다. ? 인스턴스 변수

저는 특정행동을 할 수 있습니다. ? 객체 클래스

저는 객체 안에 들어있습니다. ? 메소드 인스턴스 변수

저는 객체 인스턴스를 만들기 위한 용도로 쓰입니다. ? 클래스

제 상태는 바뀔 수 있죠 ? 객체 인스턴스 변수

 클래스와 객체는 모두 상태와 행동이 있다. 이 둘은 모두 클래스에서 정의 . 


3. 원시 변수와 레퍼런스 

-원시유형

char 16bit   char  f = 'f';

byte 8bit

short 16bit

int 32bit

long 64bit

float 32변동 가능    float f = 32.5f;

double 64bit 변동가능

-래퍼런스 유형

예약어 (reserved word) 컴파일러 인식 할 수 있는 키워드를 비롯한 단어

배열도 객체


4. 메소드에서는 인스턴수 변수를 사용합니다. 

- 클래스에서는 객체가 아는 것과 객체가  하는 것을 기술한다. 

- 메소드에서 사용하는것은 매개변수 호출하는 쪽에서 전달하는 것은 인자. 

(인자와 매개변수는.. 입장 차이군... 인스턴스 생성후 메소드에 인자를 전달함... 메소드의 매개변수 자리에)

- 캡슐화

다른 코드에서 직접 접근하지 못하게 geter setter메소드 이용

- 인스턴스 변수(전역변수) 지역변수 차이점.

1. 인스턴스 변수는 클래스 내에서 선언. 

2. 지역변수는 메소드 내에서 선언'

3. 지역변수는 사용전 반드시 초기화   --컴파일과정 에러

- 레퍼런스 변수 가 같은지 확인할 때 > .equals()

- 원시 유형 같은지 확인할 때  ==

- 나는 누구일까요?

인스턴스 변수 , 게터, 세터, 메소드 : 클래스에 들어갈 수있는 제한없음

return문 : 메소드에 이것은 하나뿐

리턴값 인자  이것은 자동으로 더 큰 유형이 될 수 있다. 

캡슐화 : 저는 인스턴스변수가  private인 것을 좋아합니다. 

값으로 전달 : 


5. 프로그램 만들기

- 익스트림 프로그래밍 (XP) 

  조금씩 자주 발표

 사이클을 반복해서 돌리면서 발표

스펙에 있는것만 집어 넣는다. 

테스트 코드를 먼저 만든다. 

정규일과 시간에만 작업

기회가 생기는 족족 어디서든 코드를 개선

모든 테스트를 통과하기 전에는 어떤 것도 발표하지 않는다. 

현실적인 작업 계획을 만든다. 

단순하게 일처리 

두명씩 팀 편성 모든 사람이 대부분의 코드를 알 수 있도록 돌아가면서 작업

--> 

1. 고수준 설계부터 시작

2. 준비코드, 테스트코드, 실제 자바코드  세가지를 만든다. 

3. 준비코드는 무엇을 해야할지. 

4. 테스트 코드는 준비코드 활용

3. 메소드 구현전에 테스트 코드 제작 

4. 순환문코드는 반복문 횟수를 미리 알수 있으면 while보다 for 사용

5. 변수에 1을 더할 때 선/후 증가 연산자사용


6. 자바 API를 알아봅시다. 

-arrayList


7. 상속과 다형성

접근 제한자. 

오버라이드 규칙

메소드 오버로딩


8. 인터페이스와 추상클래스

-추상클래스

-추상 클래스 아닌 것 구상클래스.

-추상메소드

-구상메소드

-Object

 Object로 선언된 변수로 참조되는 객체를 실제 객체 유형으로 선언된 변수에 대입할 수 없다. 

 모든 객체는 Object클래스의 인스턴스

-캐스팅

-컴파일러는 레퍼런스가 참조하는 실제 객체의 클래스가 아닌 레퍼런스 변수를 성넝ㄴ할 때 지정한 유형의 클래스를 확인

- 상속

- 다중상속 : 죽음의 다이야몬드.

- 인터페이스

- 인터페이스? 하위클래스?


9. 생성자와 가비지 컬랙션

- 인스턴스 변수는 각 개별 객체가 가지고 있는 fileld를 나타냅니다. 

- 메소드가 호출하면 그 메소드는 스택 맨위에 올라감... 현재 실행중인 메소드  

- 실제 스택에 들어가는 것은 스택 프레임. ...

- 객체는 실제 힙안에 들어가있음.  르것의 변수만 스택에 들어감. 

. - 생성자에는 객체를 생성할 때 실행되는 코드가 들어있다. 

      new  키워드 사용해씅ㄹ 때 실행되는 코드

     직접만들지 않아도 기본생성자는 자동으로 만듬 .. 만약 인자를 제공하는 생성자가 1나라도 있고. 인자없는 생성자가 없는 상태에서 인자없이 생성 못함

- 인스턴스 생성시 상위 클래스에 대한 공간도 같이 생김. -- 객체 상속트리에 들어있는 모든 생성자 실행.  - 연쇄 (constructor chaining)라는 과정

1)  생성자를 만들지 않았을 경우 생성자에서 상위 생성자를 호출하는 super() 메소드를호출하는 선언문 포함된 기본생성자 생성

2)  생성자를 만들었을 경우 super미포함.  컴파일러에서 super() 선언문 추가해줌.

- super()를 호출하는 선언문은 모든 생성자의 첫번째 선언문이어야함

- 모든 생성자에는 super(), this()를 호출하는 선언문이 들어갈 수 있지만 둘다 쓸수 없다. 

- this()는 가틍ㄴ 클래스에 있는 다른 생성자를 호출할때 사용. this()는 생성자에서만 호출할 수 있으며 반드시 그 생성자의 첫번째 선언문 

- 지역변수의 삶과 영역의 차이점

삶 : 지역변수는 스택 프레임이 스택에 들어있는 동한 계속 살아있다. = 메소드가 종료될때까지 살아있다. 

영역 :변수를 선언한 메소드 내부로 제한. 그 메소드에서 다른 메소드를 호출하면 그 변수는 아직 살아이씾만 원래 매소드가 계속해서 실행되기 전까지 영역밖에 있기 떄문에 쓸수가 없다. == 스택 제일 위에 있을 때만사용

가비지 컬렉션 대상이 된다 : 프로그램에서 쓸 메모리가 부족해지면 GC 에서 대상이 되는 객체들 중일 일부 또는 전체를 없애버리고 램이 다 떨어지는 사태를 미연에 방지. 

레퍼런스 제거 3가지 : 영역 벗어남, 레퍼런스에 다른객체 대입, 레퍼런스를 null 로 주입


10. 숫자와 정적변수, 정적 메소드

Math : 거의 전역 메소드...

static : 클래스의 인스턴스 없이 메소드 실행가능, 정적 메소드 호출시 클래스명 사용.  정적메소드가 아닌 메소드 호출시 레퍼런스 변수명 사용.


정적 메소드가 아닌 메소드가 하나라도 있으면 그 클래스의 인스턴스를 만들 수 있는 방법이 반드시 하나 있어야. 새로운 객체를 구하는 방법은  new 를 사용하는 역직렬화 를 이용하는 방법....

정적변수는 공유됩니다. 같은 클래스에 속하는 모든 인스턴스에서 그 정적변수의 하나뿐인 복사본을 공유합니다. 

인스턴스 변수 : 인스턴수마다 한 개씩

정적변수 : 클래스 마다 한개씩

정적변수는 클래스에 속하는 객체가 처음으로 만들어지기 전에 초기화된다. 

정적변수는 그 클래스에 속하는 정적 메소드가 실행되기 전에 초기화 된다. 


static final로 선언된 변수는 상수 입니다.  상수의 변수명은 모두 대문자로 씁니다. 

final클래스는 하위클래스를 만들수 없다. 

final 메소드는 오버라이드 할수 없다. 

정적메소드는 힙에 그 메소드가 들어있는 클래스의 인스턴스가 없어도 호출할 수 있다. 


Math.random() 메소드  

random() 0.0이상 1.0미만 dougle 값

abs() 절대값

round() 반올림

min()작은값

max()큰값 리턴


wrapper 클래스

ArrayList HashMap 같은것에 넣을 때 사용  자바 5.0 이전.. 원시변수 객체 레퍼런스 분리로 맞바꿔사용 불가. 


오토박싱 : 원시값과 객체 사이의 경개를 없애다

자바 5.0 도입  

오토박싱 사용 예 : 메소드 인자, 리턴값, 부울표현식 수에대한 연산, 대입, 

부울표현 : 참거짓 , 논리표현

Integer.parsInt()

.toStriingString.format("%,d",1000000);

"%,d" : v포멧팅 지시사항...  : 10진정수 쉼표

%는 인자가 들어갈 자리 

%,2f  쉼표를 집어넣고 소수점 아래 둘째 자리까지 나오는 부동소수점 수로 포매팅하라. 

포멧 지시자. 

% 인자번호, 플래그, 너비, .정밀도 유형

format ("%,6.1f",42000)

인자번호 : 인자가 두개 이상일 떄 어떤 인자를 쓸지 지정 

, :플래그

6 : 넓이

.1 : 정밀도

f , d: 유형 변경자 

%d : 십진정수 fomat("%d",42); 42

%f 부동소수점 fomat("%.3f",42.000000)  ; 42.000

%x 16진수 format("%c".42);  2a

%c 문자  format("%c",42) *


the num 2000 , and 3000

int one = 2000

double tow = 30000.00 

String.format("the num %,d, and %,.2f,one,two);


날짜

날짜 시간 전부 표시  : %tc

String.format("$tfc",  new Date())

시간만 표시 : %tr

요일 월일 : %tA %tB %td

< : 포메터에게 이전인자 다시 써주세요 .

format("%tA, %tB %td", today, today, today)

format("%tA, %<tB %<td",  today)


Calendar

- 지금 날짜와 시각 은 Date 다른 용도는 calendar

Calendar cal = Calendar.getInstance()

add

get

getInstance

getTimeInMillis

roll

set

set

setTimeInMllis

ZONE_OFFSET : 그리니치 표준시와의 차이(밀리초 단위)

HOUR/HOUR_OF_DAY

12 / 24


정적임포트 

** 가독성이 떨어질 수 있음

import static java.lang.System.out;

import static java.lang.Math.*


11. 예외 처리

예외도 객체. Exception 유형의 객체

try catch  : 예외적인 상호아 처리...

tjrpw mew Exception

RuntimeException은 try/catch 사용여부 상관없이 어디선든 사용가능

* finally  : try catch 블록에 return 선언문이 있어도 finally 블록은 실행된다. 


메소드에서 예외를 두 개 이상 던질 수 도 있다. 

public void doLaundary() throws PantsException, LingerieException(


)  --> catch 블록 순서의 중요성.  작은것 --> 큰것으로 나열

1.exception 발생  -> 메소드 try catch 미사용 ...  --> main ... 해당 메소드 스택에서 제거..---> jvm 종료



javax.sound,midi.*;


12 GUI

swing

13스윙 사용방법


 14 직렬화와 파일 입출력

자바프로그램에서만 데이터 사용 : 직렬화 이용

다른 프로그램에서도 사용하면 : 일반 텍스트로 저장

1. FileOutputStream 만든다. 

FileOutputStream fileStream = new FileOutputStream()"MyGaime.ser";

2. ObjectOutputStream을 만든다. 

ObjectOutputStream os = new ObjectOutputStream(fileStream);

3. 객체를 저장한다. 

os.WriteObject(characterOne)

4. ObjectOutputStream 닫는다. 

os.close();


연결 스트림 : connection stream   : 출발지 목적지 연결 나타냄

연쇄 스트림 : chain stram       : 다른스트림에 연쇄되어사용

FileOutputStream  : 연결 스트림에는 바이트를 저장하기위한 메소드가 있지만 직접 저장하지 않는다. 

ObjectOutputStream : 연쇄 스트림 : 객체를 스트림으로 보낼수 있는 형태로 바꿈. 

객체 ------>  ObjectOutPutStream-연쇄스트림 (객체 직렬화) -----> fileOutpoutStream-연결스트림(객체 바이트형태저장)  --->01001101010-파일(목적지)

       (전달)                                                                (연쇄)


객체 직렬화 

Serializable

objectOutputStream.writeObject(a)

   ; a는 반드시 직렬화  아니면 런타임 오류. 


객체 복구


+ Recent posts