3/27 월 필기

konut ko·2023년 3월 27일
1

더존비즈온5기

목록 보기
6/46

배열 만드는 법

int[] arr = new int[5]; // 빈 배열 선언
int[] arr2 = new int[]{1,2,3,4};
int[] arr3 = {1,2,3};

객체배열 만들기

객체 배열은 두번 작업한다!

  • step1_ 방 만들기
Cat[] cats = new Cat[3]
  • step2_ 방 채우기
for(int cat : cats){
	cat = new Cat();
}
// 또는
for(int i = 0; i<cats.length; i++){
	cats[i] = new Cat();
}

두번의 작업을 한 줄로 쓰는 것도 가능하다.

Cat[] cats = Cat[] {new Cat(), new Cat(), new Cat()}
// 또는
Cat[] cats = {new Cat(), new Cat(), new Cat()}

배열 선언 시 메모리

클래스배열도 가능하다

클래스 배열은 클래스의 주소값을 담을 수 있다.

다른클래스의 함수로 배열을 만드는 경우 메모리 그림

복습 코드

1

main 함수

class 객체

2

class Human{
	String name;
}

class OverClass{
	int add (int i , int j ) {
		return i + j;
	}
	void add(Human human) { // Human 타입의 주소값을 넣어주면 되는 구나***************** add(new Human())
		System.out.println(human.name);
	}
	// 1. add(new Human());
	// 2. Human h = new Human(); add(h);
	// 반드시 해야 합니다^^
	
	//배열은 객체다 == 배열도 타입이다.
	int add(int param) {
		return param + 100;
	}
	
	int[] add(int[] params) {// 주소값 받는다잉 // add(String ... values) >> add(1,2,3), add(1,2)
		// int[] arr = {1,2}    add(arr) // 배열타입의 주소값
		// 안의 코드 여러분 마음
//		 add (new 
		int[] target = new int [params.length];
		for(int i = 0; i< target.length; i++) {
			target[i] = params[i] + 1;
		}
		return target; // 주소값(heap에있는 int[] target 배열 주소)
//		return null; // 스택메모리에 생성되는 것 null 값 가질 수 있다. (배열 생성 때 heap 에서 null값 가지듯)
		
		// *앞으로 코딩 할때 리턴 null 일단 정의 해놓고 코드작업하기*
	}
}

public class Ex06_Array_Method {

	public static void main(String[] args) {
		OverClass overt = new OverClass();
		int[] source = {10,20,30,40,50};
		int[] ta = overt.add(source);
		for(int value : ta) {
			System.err.println(value);
			
		}
		
	}


}

3 overloading

4 static

(1)

(2)

/*
 함수 사용시 parameter 값을 전달 or 주소값 (참조값) ref 전달
 void m(int x) { x라는 변수는 값을 받는다
 	x값 출력 : 100
 	x = 10000; 
 } 
 
 int y = 100;
 호출 m(y)
 
 call by value
 -----------------------------------------------------
 void m2 (Car c) {  // c라는 parameter는 Car 타입을 가지는 객체의 [주소값]을 받겠다
 	c.color 출력 : red
 }
 
 Car c2 = new Car(); //c2의 주소가 : 0xab..
 c2.color = "red";
 
 m2(c2) >> m2(0xab...)
 
 call by ref
 */
class Data {
	int i;
}

public class Ex10_Method_Call {

	static void scall(Data sdata) { // Data 타입을 갖는 주소값을 받겠다 (ref)
		System.out.println("함수 : " + sdata.i);
		sdata.i = 1111; //0xaaa번지에 있는 i 라는 변수값을 1111변경
	}
	
	static void vcall (int x) { // 정수값을 받겠다(value)
		System.out.println("before x : " + x);
		x = 8888;
		System.out.println("after x : " + x);
	}
	
	public static void main(String[] args) {
		
		Data d = new Data(); //d변수는 주소값 0xab 번지
		d.i = 100;
		System.out.println("d.i : " + d.i);

		scall(d); //0xab ; 주소값전달
		System.out.println("d.i : " + d.i);
		//////////////////////////////////////////////////////
		
		vcall(d.i); //1111 ; 값전달
		System.out.println("d.i : " + d.i);
		
	}

}

profile
보초딩코라 틀린 내용 있을 수도 있습니다. 댓글 지적 환영

0개의 댓글