[접근제한자] [예약어] class 클래스명 {
[접근제한자] [예약어] 자료형 변수명 [= 초기값];
}
public class Academy {
public int temp1;
protected int temp2;
int temp3; //접근제한자 생략 시 (default)
private int temp4; //캡슐화 원칙으로 private 사용
}

public class Student {
protected int v2 = 20;
public void ex() {
System.out.println(v2);
}
}
public class ClsService extends Student {
System.out.println(std.v2);
}
(static 공전)
같은 타입의 여러 객체가 공유할 목적의 필드에 사용하며, 프로그램 start시에 정적 메모리(static) 영역에 자동 할당되는 멤버에 적용
시작부터 종료까지 계속 있음
(Heap 영역 - 동적 메모리 영역)
(new 연산자가 만들었다가 garbage collector가 없앰)
Student std1 = new Student();
Student std2 = new Student();
public static String schoolName = "KH고등학교";
프로그램이 시작되자마자 static 영역에 메모리가 할당됨(JVM 읽음)
메모리 구조

하나의 값만 계속 저장해야 하는 변수에 사용하는 예약어
public class Academy {
private final int TEMP1 = 100; // final 키워드가 붙은 필드명은
// 모두 대문자로 표기
private int temp4;
}
잘 사용 하지 않음
생성자를 통한 초기값 사용
객체 지향 언어 -> 객체가 상호작용 그대로 컴퓨터 옮겨 놓은 것.
클래스 필요, new 연산자 통해서 만듦
객체가 new 연산자를 통해 Heap 메모리 영역에 할당될 때
객체 안에서 만들어지는 필드 초기화 + 생성 시 필요한 기능 수행
생성자는 일종의 메소드로 전달된 초기값을 받아서 객체의 필드에 기록
Student std = new Student();
Student(); 생성자 (새롭게 새로운 기능을 생성하는 메서드 중 하나)
생성자의 선언은 메소드 선언과 유사하나 반환 값이 없으며 생성자명을 클래스명과 똑같이 지정해주어야 함.
[접근제한자] [예약어] class 클래스명 {
[접근제한자] 클래스명() { }
[접근제한자] 클래스명(매개변수) { (this.)필드명 = 매개변수; }
}
반환값 없음
public class Academy {
private int studentNo;
private String name;
public Academy() {} // 기본 생성자(매개 변수 없음)
public Academy(int studentNo, String name) { //매개변수 있는 생성자
this.studentNo = studentNo;
this.name = name;
}
}
꼭 하나만 쓸 수 있는 건 아님
작성하지 않은 경우, 클래스 사용 시 컴파일러가 자동으로 기본 생성자 생성
(과적)
한 클래스 내에 동일한 이름의 메소드를 여러 개 작성하는 기법
원래는 한 이름당 기능 한개
(모든 객체에 숨겨져있는 참조 변수)
모든 인스턴스의 메소드에 숨겨진 채 존재하는 레퍼런스로, 할당된 객체를 가리킴
함수 실행 시 전달되는 객체의 주소를 자동으로 받음
public class Academy{
private String name;
public Academy() { }
public Academy(String name) { this.name = name; }
}
this()
생성자, 같은 클래스의 다른 생성자를 호출할 때 사용, 반드시 첫 번째 줄에 선언해야함
public class Academy{
private int age;
private String name;
public Academy() { this(20, “김철수”); }
public Academy(int age, String name) {
this.age = age; this.name = name;
}
}
수학의 함수와 비슷하며 호출을 통해 사용, 전달 값이 없는 상태로 호출을 하거나 어떤 값을 전달하여 호출을 하며, 함수 내에 작성된 연산 수행
수행 후 반환 값 / 결과 값은 있거나 없을 수 있음
public void ex() {}
-> 반환값X, 전달값X
public String ex2() {
return "Hi";
}
-> 반환값O, 전달값X
public void ex3(String name) {
System.out.println(name);
}
-> 반환값X, 전달값O
[접근제한자] [예약어] 반환형 메소드명( [매개변수] ) {
// 기능 정의
}
public void information() {
System.out.println(studentNo);
}
대괄호는 생략 가능

써도 되고 안 써도 되고

메인 메서드
public static void main(String[] args) {}
오버로딩 : 같은 메서드명으로 여러 개 만드는 기법(매개변수 달라야함: 개수, 타입, 순서)
오버라이딩 : 재정의 (덮어쓰기)
abstract(추상) : 추상메서드
void : 반환형이 없음을 의미, 반환 값이 없을 경우 반드시 작성
public void ex1() {
System.out.println();
}
기본 자료형 : 연산 수행 후 반환 값이 기본 자료형일 경우 사용
public int ex1() {}
public boolean ex2() {}
public float ex3() {}
.
.
.
배열 : 연산 수행 후 반환 값이 배열인 경우 배열의 주소값이 반환
public int[] ex1() {
int[] arr = new int[5];
return arr;
}
클래스 : 연산 수행 후 반환 값이 해당 클래스 타입의 객체일 경우 해당 객체의 주소값이 반환 (클래스 == 타입)
public String ex1() {}
Stirng 클래스를 반환하는 거
Member{} // 클래스 생성
// 사용자 정의 자료형
public Member ex1() {
return Member;
}

public void ex1(int\[] arr) {}
public void ex2(Member) {}
public void ex3(int num) { // 매개변수 정수형 1개밖에 못 받음
}
ex3(100); // 전달인자 한개로 호출
// 가변인자
public void ex4(int... nembers) {
}
ex4(1);
ex4(100,200,...);
// 전달인자 타입만 맞추면 개수 상관없이 호출 가능
해당 메소드를 종료하고 자신을 호출한 메소드로 돌아가는 예약어
반환 값이 있다면 반환 값을 가지고 자신을 호출한 메소드로 돌아감

STACK의 자료구조 : LIFO(Last-Input-First-Out)
마지막에 들어온 애가 처음으로 나감