
Case1 B makeB(){ b = new B(); //B 객체를 생성 선언되어 있는 변수 b에 대입 return b; } 매번 makeB()를 하면 new를 해서 b를 만든다. 새로운 객체를 매번 넣어준다는 소리다. 클래스 B에 있는 k는 객체에 붙는다. (static 없으므로) 1)에서 a 객체를 만들고 2)에서 a에서 makeB()를 한다. 이 때 B라는 객체가 생길 것이고, 그 결과를 b1이라는 변수에 저장. 즉 b1과 B 객체가 연결 3)에서 b1을 타고 들어와서 k에 10 값을 대입. 4)는 a를 통해서 b에 접근해서 b에 있는 k에 20을 대입. 즉, b1.k와 a.b.k는 위치가 같다. 지금 위 그림에선 편의를 위해 노란색 상자 B를 A 내부에 집어넣은 것처럼 표현했지만, 사실 정확히 말..

// 주석참고!!! package megait.backend_lecture.Day19; class B { } class C { B[] b = new B[5]; //멤버변수 has 관계 (변수만 있으면 Has관계 가능하다) // 그러면 당연히 배열도 가능한 것이다. } class D { //has 관계?? 아니다! // 멤버변수로 갖는 거랑 메서드로 부르는 거랑 차이가 있으므로 // 내가 실제로 가지고 있어야 한다. B make(B[] b) { b[2] = new B(); return b[2]; } } class E { D[][] d = new D[3][3]; /* D[][] sendD(D[][][] d, int i, int j, int k) { return d[0]; // 자료형으로 받고 싶은 만큼 뒤에..
// 1. A학생 색연필 while (true) { System.out.println(""); System.out.print(a.name + " 색연필 색깔 골라주세요 : "); String color = sc.next(); //1) 색이 올바르게 입력된 경우 => 문구점에 있는 펜을 학생에게 줘야. if (color.equals("주황색") || color.equals("초록색") || color.equals("노란색") || color.equals("파란색")) { // 부족한 부분 ?? 벌써 팔렸습니다. 색깔이 다 돌면서 없으면 팔린 것. //i를 바깥에서 초기화 할 수 있도록 해줌. 왜냐면 다 팔린 것까지 쓸 것이기 때문에 계속 필요하므로 // 1-1. 문방구에서 색깔이 맞는 색연필 찾기 Colo..

package Day16; class Car{ String color; String menu; int maxSpeed; Car(String color, String menu, int max){ // 고생방지 this.color = color; this.menu = menu; maxSpeed = max; // 매개변수의 이름을 바꿔서 넣으면, this를 안 써도 된다. } void dirve(String driver) { // 여기가 비어있으면 비어있는대로 출력이 될 것이니까. System.out.println(driver+"자동차 색깔 "+color+"이고 제조사가 "+menu+"인 차를 최고속도로 "+ maxSpeed+"로 운전을 합니다."); } } class Bicycle{ String menu; ..
class B{ //static int a1; int a1; int b1; B(int a, int b){ a1 = a; b1 = b; } } public class CTest { public static void main(String[] args) { // TODO Auto-generated method stub B b = new B(5,7); //a1 5 0 b1 7 b.a1 = 20; //a1 = 20, b1 = 7 //static a1로 바뀌면 B 객체가 100개 만들어지더라도 a는 하나가지고 쓰면 되어서 하나. //static이면, a는 객체 만들 필요 없이 B.a1 찍으면 사용이 가능함. } } Has 관계 클래스 내부에 다른 클래스의 요소를 가지고 있는 관계 상황설정 Class A{ int a..
생성자 : 객체를 생성할 때 필요한 함수 // 이 정도로 정리하면 충분. Class A{ int a; // 멤버변수(속성) void print(int a // 매개변수 또는 인자){ // 메소드(기능) int b; // 메소드변수 또는 지역변수 } // default 생성자 -> 선언을 안하면 자동 추가 A(){ } } 내가 생성자를 따로 선언할 수도 있다. 디폴트 생성자는 선언이 안 되어 있을 때 자동 추가되는 것이고, 만약 다른 것이 선언 되어 있으면, 추가되지 않는다. 생성자를 명시적으로 선언할 때, 디폴트 생성자와 동일한 형태로 만들 수도 있다. ???? A a = new A(); 생성자(default 생성자) Class B{ B(int a, int b){ } } 생성자의 형태를 따라줘야 객체를 ..

클래스 도입 전, 한 가지 알고 가야할 것 자바는 객체지향언어 입니다.(O) 자바는 클래스지향언어 입니다.(X) 등장배경 1. 개수 제한 => 배열은 크기가 한 번 정해지면 변동이 불가능 2. 똑같은 자료형만 사용가능(특히 배열)하므로, 여러 정보를 한 번에 가져다가 저장하기가 어렵다. 이걸 보완하기 위해 먼저 등장한 개념 "구조체" 구조체 =>여러 자료형 변수를 하나의 변수로 관리하는 매커니즘. 그런데, 구조체 역시 한계가 왔다. 그래서 구조체에 함수(메서드) 개념을 더하여 => 클래스가 등장했다. 클래스란... 클래스 속성(데이터) + 기능(메소드) 의 집합 예시) 개(dog) 개 -> 이름(String), 키(int), 나이(int) // 짖는다, 움직인다, 꼬리를 흔든다. 속성 (필드) 기능(메서..

재귀함수 : 내가 나를 부르는 함수 더 정확하게는 함수 내부에서 자기가 자기를 호출하면서 작업을 수행하는 방식. * 재귀함수는 특정한 종료 조건이 있어야 함. => 그렇지 않으면 함수가 무한히 호출되어 StackOverflowError와 같은 예외가 발생할 수 있음. 코드 예시 static int abc(int a){ if(a == 0){ return 0 } else { return abc(a-1) + a; } } 이러한 상황인 것인데, 먼저 abc(5)가 호출되면 0이 아니므로 abc(4) 가 되고 num에는 5가 저장 다음으로는 abc(4)가 호출되는데 0이 아니므로 abc(3)이 되고 num에는 4가 저장 다음으로는 abc(3)이 호출되는데 0이 아니므로 abc(2)가 되고 num에는 3이 저장 다..