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이 저장 다..
상속 상속은 두 클래스 간의 관계를 의미한다 자식 클래스가 부모 클래스를 상속한다(extends) 자식 클래스는 부모 클래스의 필드와 메서드를 상속받는다 자식 클래스는 단 하나의 부모 클래스만을 가질 수 있다 자식 클래스 내에서 부모의 객체에 접근할 때는 super 키워드를 사용한다 자식 생성자에서는 반드시 부모 생성자를 먼저 호출해야 한다 자식 생성자에서 this()나 super() 를 호출하지 않으면 컴파일러가 super() 를 첫 줄에 삽입한다 ** 자바는 다중 상속이 안 됨(하나만 가능) -> 이 때 대안이 없을까? ==> 있다. 인터페이스 ** 인터페이스는 다중 상속에 대한 제약조건이 따로 없다. 다음을 잘 살펴보면, interface Parent{ void m2(); } interface Gr..
Static vs Non-static **클래스 필드(static field)** - 클래스 필드는 클래스의 인스턴스가 아닌 클래스 자체와 연관 public class MainClass { public static final String TOP_MANAGEMENT = "top"; public static void main(String[] args) { String topManagement = MainClass.TOP_MANAGEMENT; // 객체를 만들지 않아도 바로 받을 수 있다. // 왜냐면 얘는 인스턴스에 붙는 게 아니라 // static 키워드를 보면 알 수 있듯이 클래스에 붙는다는 걸 알 수 있지. public class MainClass { String name; public static f..

클래스 클래스는 하나의 데이터 타입을 만드는 것이고, 자바 컴파일러가 모든 타입을 만들어 줄 수는 없으니 현실의 문제를 풀 때마다 우리가 데이터 타입을 하나씩 만들어준다는 개념 클래스 하면 빼놓을 수가 없는 게 생성자 생성자 - 쉽게 말하면, 객체를 만들 때 불리는 함수. - 스프링 개념을 조금 섞자면, JPA에서 엔티티로 관리할 클래스는 기본 생성자가 반드시 있어야 한다. - 기본 생성자는 인자도 없고 메서드 본문도 없는 소위 "깡통" 같은 것. - 모든 클래스는 생성자를 반드시 하나는 가지고 있어야 하기 때문에 자바 컴파일러가 기본으로 만들어준다. - JPA에서는... JPA는 객체 세계와 데이터베이스 세계를 매핑해주는 아이기 때문에 기본 생성자를 제공해야 함. 생성자 활용 (1) 객체가 생성되자마자..

1. main문만 짜기 import java.util.Scanner; public class StarAndGugu { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (true) { System.out.println("[원하시는 메뉴를 선택하세요]"); System.out.println("1. 구구단 출력"); System.out.println("2. 별 찍기 출력"); System.out.println("3. 종료"); System.out.print("번호 선택 > "); int num = sc.nextInt(); if(num == 1) { System.out.println("[다음 중에서 고르시오]"..