//예시 1 -TV 타입 참조 변수
Tv tv1, tv2, tv3 ;
Tv[]tvArr = new Tv[3]; // 객체생성!
tvArr[0] = new Tv(); // 객체생성!
t1 0*100 // tv 객체
t2 0*200 // tv 객체
t3 0*300 // tv 객체
Tv[] tv Arr ={new Tv(), new Tv(), new Tv()};
tvArr []
참조변수 t1, t2, t3 -> 하나의 배열 -> 참조변수 배열 [] 여러개 묶어서 하나의 객체로 만든다
Q 참조 변수 3개를 배열로 만들어서 -> 객체화 ?? 개념이 다른거 아닌가요?
A
A 참조변수 생성 과정 -> 객체 배열은 단순히 참조변수 배열이기에 객체를 채워서 넣어준다.
객체배열 == 참조변수 (여러개를 묶은 하나의) 배열
1. 설계도
2. 데이터 + 함수
3. 사용자 정의 타입
+ 다른 타입도 ok
+ 서로 관계
//예시1
//객체지향적인 코드 - 코드가 서로 결합적이다, 유지보수에 편하다,
class Time {
int hour;
int minute;
int seconds; }
Time t = new Time();
t.hour = 12;
t.minute = 34;
t.second = 56;
//비교
//비 객체지향적인 코드
int hour;
int minute;
int seconds;
3개의 변수 === 3개의 저장 공간
t [0*100] 이라는 참조변수 => 저장공간 3개
Class Variables {
int iv; //인스턴스 변수 -1
static int cv; // 클래스 변수 static 변수, 공유변수 -1
{
int lv = 0 } // 지역 변수 - 2
}
변수의 종류 | 선언위치 | 생성시기 |
---|---|---|
cv | 클래스 영역 | 클래스 메모리에 올라갈 때 ,선언문만 가능(ex 변수 선언, 메서드 선언) |
iv(static+) | 클래스 영역 | 인스턴스 생성 시 ,선언문만 가능(ex 변수 선언, 메서드 선언) |
lv | 클래스 외 영역 (메서드, 생성자, 초기화 블럭 내부) | 변수 선언문이 수행되었을 때, 메서드 선언(정의) |
주의
lv : 메소드 scope 범위 주의 메소드 종료시 자동 제거
iv ,cv : 클래스 scope 전역변수
객체 = 인스턴스, 인스턴스 변수 여러개 , iv를 묶어 놓은것
ex )
cpu <-> Ram (메모리 ) <-(속도차이) ssd/hdd Time.class (설계도)
로딩 :디스크에서 메모리에 얹는다
세이브 :메모리에서 디스크에 저장한다
cpu는 ram 하고만 읽고 쓴다 (작업한다)
객체 = iv 변수 묶음
iv는 참조변수 없어지면 가비지 컬렉터에 의해 제거
Card c = new Card();
Card.width = 20 //클래스 이름. 속성이름
c.number =5; // 인스턴스 속성
ex -flash )
iv -> heap에 저장된다 객체 2개 = iv 2개 (iv 1개 /객체당)
main()메소드 -> call stack 한다
설계도, cv -> method area 에서 1개만 만들어진다.
추가로 해야 할 것 :
1-1. 코드중복 나쁨! -> 메소드를 호출해라 !
1-2. 작업단위로 묶는다
2-1. 함수 - 클래스에 독립적
, 메서드 -클래스 안에서 선언
2-2. 작업 사용한 값들 (입력) -> 블랙 박스 (덧셈) -> 출력
3-1. 코드 중복 제거
3-2. 코드 관리 용이
3-2. 코드 재사용
3-2. 코드 간결화 가독성 높임
4-1. 반복적으로 수행되는 여러 문장 메서드 작성 - 간결화
4-2. 하나의 메서드는 한 가지 기능만 수행하도록 작성
5-1. 메서드 = 선언부 + 구현부
선언부 | 구현부 |
---|---|
반환타입,메서드(타입변수명.. 매개변수목록(입력), 작업 필요한 값들) | 메서드 호출시 수행될 코드 |
작업결과 타입(출력) | {}로 묶인 문장 |
6-1. 값이 여러개 출력시 = 배열 이용해서 하나의 객체로 묶어서 만들어준다
6-2. 반환 값이 없을 경우 = void
선언
7-1. 지역변수 - 메서드 내에 선언된 변수
7-2. 메서드 영역이 다르면 변수 이름이 같아도 ok , 겹치지 않는다
7-3. 매개 변수 = 지역변수
1-1. 메서드 이름 (값1,2,...)
//메서드 호출방법
print99(); // void print99()를 호출 -> 반환값이 없다 (void가 반환타입)
public static void main(String[] args){
int result= add(3,5); // int add(intx, y)호출 하고 결과 result에 저장
int add(int x, int y); // 3,5 대입
int result = x+y; // 3 +5
return result; // 반환
}
1-2. 작업 결과를 저장할 변수 int reuslt
, 매개변수 parameter
1-3. 작업 순서 유의
메서드 작업을 마치면 -> 메서드를 호출한 곳으로 다시 돌아온다!
1-4. 자동형변환이 가능! (메소드의 매개변수에서만)
`객체 생성 > 메서드 호출 > return 반환값 > 원래 호출한 곳으로 > 작업 결과가 바뀜`
void printGugudan(int dan){
if(!(2<=dan && dan <=9))
return; // dan 이 if 조건문에 맞지 않을경우, 호출한 곳으로 그냥 되돌림
for(int i = 1; i<=9; i++){
System.out.println("%d%n",dan, i)
}
return; //반환 타입이 void = 생략가능! = 컴파일러가 자동추가
}
1-1. 주의
return
반환 타입이 void = 생략가능! = 컴파일러가 자동추가
int max (int a, int b){
if (a>b) //참
return a;
else //거짓 (a<b)
reutnr b;
}
2-1. 메서드 타입이 일치 해야한다. (return 시 자동 형변환)
2-2. 반환타입과 일치 , 결과를 담을 변수 타입과도 일치해야함.
6-22
6- 23
6 -24,25
6-26~29
6 - 30~31
6- 32~35
6-36,37
6-38~41