public class Student {
// 이들 변수들은 클래스 스코프를 가집니다.
private String name; // private 접근 제어자는 이 필드를 같은 클래스 내에서만 접근할 수 있도록 합니다.
private int age;
private double grade;
public Student(String name, int age, double grade) {
// 생성자에서 클래스 스코프의 필드를 초기화합니다.
this.name = name;
this.age = age;
this.grade = grade;
//this가 의미하는것은 파라미터의 변수명(public Student(String name, int age, double grade))
//생성자 내부의 필드명(= name;)이 같을때 구분짓기 위해 사용됨
}
// 각 필드에 대한 getter 메소드를 제공합니다.
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
public double getGrade() {
return this.grade;
}
// 각 필드에 대한 setter 메소드를 제공합니다.
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setGrade(double grade) {
this.grade = grade;
}
public void printStudentInfo() {
// 이 메소드는 클래스 스코프의 필드에 접근합니다.
System.out.println("Name: " + name + ", Age: " + age + ", Grade: " + grade);
}
}
Literal = immutable
자바의 String은 변경 할 수 없는 유니코드 문자의 시퀀스를 포함
String s1 = "Hello"; // String literal
String s2 = "Hello"; // String literal
String s3 = s1; // same reference
String s4 = new String("Hello"); // String object
String s5 = new String("Hello"); // String object








자바 가상머신은 바이트코드를 인터프리팅하거나 JIT(Just In Time)컴파일러를 통해 기계어로 변환하여 실행
AOT 컴파일(Ahead-of-time compile) : 안드로이드 런타임
HotSpot JVM :
바이트 코드는 기계어라 생각하면 됨
// 추상 클래스
abstract class Animal {
String name;
public Animal(String name) {
this.name = name;
}
public abstract void sound(); // 추상 메서드
public void eat() {
System.out.println(name + "이(가) 먹는 중입니다.");
}
}
// 인터페이스
interface Flyable {
void fly(); // 추상 메서드
}
// 추상 클래스를 상속받고 추상 메서드를 구현한 구체 클래스
class Dog extends Animal {
public Dog(String name) {
super(name);
}
public void sound() {
System.out.println(name + "이(가) 멍멍하고 짖습니다.");
}
}
// 인터페이스를 구현한 클래스
class Bird implements Flyable {
public void fly() {
System.out.println("새가 날개를 펄럭이며 날아갑니다.");
}
}