운영체제 JDK 설치 -> 운영체제 메모리 위 JVM(가상 머신 메모리 탑제)
1차 컴파일 된 byte 코드 -> JVM이 OS에 맞게 실행 가능한 코드로 만들어 실행
운영체제에 상관 없이 독립적으로 구동할 수 있다 : JVM에 의함

float f;
f = 34.5f;int a = 10;
float b = 34.5f;변수 목록표(Symbol Table)에 변수이름과 주소 저장
변수가 기억공간을 할당 받으면 변수의 번지가 등록되는 테이블
ST에 변수가 없으면 can not find symbol 에러
| 변수이름(key) | 번지(value) |
|---|---|
| a | 100번지 |
| b | 200번지 |
변수 목록표는 JVM 내 실행됨

가변길이 배열 저장 가능
int[][] a = new int[3][];
a[0] = new int[3];
a[1] = new int[4];
a[2] = new int[5];
// 정의부
public int sum(int a, int b)
// 구현부
{
return a + b;
}
4가지 영역을 모두 사용하거나 일부만 사용하며 프로그램 동작
main 메서드의 경우 JVM에서 가장 먼저 실행하므로, 항상 static을 붙여줘야 함(그래야 메모리에서 읽을 수 있음)
public class TPC08 {
public static void main(String[] args){
int a = 10, int b = 20;
int v = add(a, b);
System.out.println(v);
}
public static int add(int a, int b) {
int sum = a + b;
return sum;
}
}
static 메서드를 호출할 때 과정

public class TPC09 {
public static void main(String[] args){
int a = 10, int b = 20;
TPC09 tpc = new TPC09();
int v = tpc.add(a, b);
System.out.println(v);
}
public int add(int a, int b) {
int sum = a + b;
return sum;
}
}
static이 없는 메서드를 호출할 때 과정

static 메서드 내에서 static이 아닌 객체의 메서드를 사용하기 위해서는 객체를 생성해줘야 하거나, 이미 생성된 상태여야 함
public class BookDTO {
public String title;
public int price;
public String company;
public int page;
// 디폴트 생성자 메서드(생략)
public BookDTO() {
//객체를 생성하는 작업(기계어 코드)
}
} ```java
public class BookDTO {
private String title;
private int price;
private String company;
private int page;
// 디폴트 생성자 메서드(생략)
// 밑에 생성자를 만들어줬기 때문에 디폴트 생성자는 자동으로 만들어지지 않음
// 명시적으로 만들어 줘도 사용할 수도 있음
public BookDTO() {
//객체를 생성하는 작업(기계어 코드)
}
// 생성자 오버로딩(매개변수 타입이나 수가 다름)
public BookDTO(String title, int price, String company, int page) {
this.title = title;
this.price = price;
this.company = company;
this.page = page;
}private 생성자를 가지면 객체를 생성할 수 없음
public class Inflearn {
// 모든 멤버가 static 멤버이면 인위적으로 private 생성자로 만들어 객체 생성을 막을 수도 있다.
private Inflearn() {
}
// 인스턴스 메서드 : 객체를 생성해야 사용 가능
// 생성자 메서드가 private이기에 호출할 방법이 없음
public void tpc() {
System.out.println("TPC강의 너무 재미있다.");
}
// 클래스 메서드 : 객체 생성하지 않아도 가능
// method Area의 static-zone에 올라가 있음
// Inflearn.java(); 로 호출 가능
public static void java() {
System.out.println("Java강의 너무 재미있다.");
}
}
static과 일반 메서드가 같이 있다면, public 생성자를 두고,
static 메서드만 사용할 때는 객체를 생성할 필요가 없음.
Java API에서 생성자가 private인 클래스 있음
static 멤버 접근 방법 : 클래스이름.메서드(static 메서드)
public class BookDTO {
public String title;
public int price;
public String company;
public int page;
}
// 객체(변수) object, 구별이 되지 않음
BookDTO b1;
BookDTO b2;
BookDTO b3;
// 구체적인 객체를 가르키면 구별이 됨
// 각각을 인스턴스(변수)라 부름(b1)
// 객체가 생성이 된 다음에 구체적인 인스턴스를 가르키면 인스턴스변수라 부름
b1 = new BookDTO();
public class MemberVO {
// 1. private로 객체의 상태 보호
private String name;
private int age;
// 2. 디폴트 생성자를 명시적으로 만듦
// 기본 생성자가 있으면 자동으로 만들어 지지 않으니, 만들어 두는 것이 좋음
public MemberVO() { }
// 오버로딩 생성자를 말들어 적절하게 초기화한다.
// 초기화를 효율적으로 하기 위함
public MemberVO(String name, int age) {
this.name = name;
this.age = age;
}
// 3. setter와 getter
public String getName() {
return name;
}
public void setName(String name) {
// DI(Dependency Injection : 종속객체 주입)
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
// 4. toString 정의
// 디버깅 하기가 쉽다
// toString 메서드는 생략할 수 있음
// 만일 m1이라는 객체가 있다면, toString 메서드가 이미 정의되어 있기에 toString 메서드를 호출하지 않아도 알아서 호출해줌
// System.out.println(m1)
@Override
public String toString() {
return "MemberVO [name=" + name + ", age =" + age + "]";
}
}
public class OverLoad {
public void hap(int a, int b){
System.out.prinln(a+b);
}
public void hap(float a, int b){
System.out.prinln(a+b);
}
public void hap(float a, float b){
System.out.prinln(a+b);
}
}
MovieVO[] marr = new MovieVO[5];// 원래는 import문으로 포함 안되면 아래와 같이 적용해야 함
java.lang.String str = new java.lang.String("Apple");
강의를 보며 거의 아는 내용이지만, JVM관련해서 heap, stack, method Area 등 좀 상세히 듣기는 처음이라 좋았던 것 같다.
2만원을 주고 산 강의기에 배속, 넘겨가며 보고 있지만.. 그래도 다시 개념 잡고, 몇몇 자세하게 몰랐던 부분을 파악하기에 좋은 강의라 생각한다.
자바 클래스, 배열 부분 관련해서 모르는 분들이 많이 보면 도움 될 것 같다.
2부도 이런식으로 후딱 봐보려고한다! 득이되면 득이됐지, 실이되진 않겠지!
강의 출처남기면 블로그 작성해도 된다고 하셨지만, 상세 실습코드는 작성하지 않았습니다. 강의를 통해 확인하세요!