In Java, most variables and literals are objects
An object is an instance of a class
class Employee{
String name;
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
}
public class Lecture{
public static void main(String[] args){
Employee m = new Employee(); // 이게 바로 object, instance
}
}
한개의 .java 파일 내에는 여러개의 class가 정의 가능 하지만 오지 하나의 클래스만이 public class 이름을 달을 수 있음 또한 public class 내에는 main method가 들어가 있어야 함
원래는 다음의 과정을 거치었어야 함
$ javac Lecture.java
=> javac 로 컴파일 하면 .class 파일이 생성됨
$ java Lecture
=> main method of class 가 실행됨
하나의 클래스 안에는 변수와 함수가 정의되어야 함
class Employee{
String name; // variable of class
public void setName(String name){ // method of class
this.name = name;
}
public String getName(){
return this.name;
}
}
instance variable
class 내부에서 static이 붙지 않은 변수, 멤버 변수를 의미함
Access Modifier
public void setName(String name){ // method of class
this.name = name;
}
되어 있는 것을 볼 수 이는데 이것은 매개변수와 클래스 인스턴스변수를 구분하기 위한 자기 클래스에 존재하는(this) 이라는 명령어이다.
package cse
class Employee{
String name;
}
public class Lecture{
public static void main(String[] args){
Emploee m = new Employee();
m.name = "Peter";
System.out.println(m.name);
}
}
위의 코드에서는 main 함수내에서 Employee 클래스 내의 name 변수를 직접 접근할 수 있는 것을 보여준다.
하지만 만약 name 변수가 private String name
으로 정의하였다면 main에서 접근하지 못한다.
그렇다면 도대체 무엇을 위해 이러한 정의를 만들었을까? 그것은 바로 프로그램에서 에러가 나는 경우를 줄이기 위해서이다.
class Employee{
String name; // variable of class
public void setName(String name){ // method of class
this.name = name;
}
public String getName(){
return this.name;
}
}
이를 호출하는 경우
public class Lecture{
public static void main(String[] args){
Employee m = new Employee();
m.setName("Peter"); //이런식으로 멤버변수에 접근 할 수 있게 함
System.out.pirntln(m.getNmae());
}
}
이를 위해서 외부에서 반드시 호출할 필요가 있는 함수만 public
이를 제외한 함수와 변수는 모두 private 으로 설정한다.
public class Lecture{
public static void main(String[] args){
Employee m = new Employee();
m.setName("Peter");
System.out.pirntln(m.getNmae());
}
}
new Employee()
라고 괄호를 여는 이유는 constructor of class가 호출되기 때문이다. 하지만 우리는 아직 constructor을 선언해 놓지 않았기 때문에 default constructor이 호출된다.
자바에는 automatic garbage collection이 존재하기 때문에 C++ 처럼 메모리 해제를 해주지 않아도 된다.
ex>
String a = new Stinrg("A");
String b = new Stinrg("B");
b=a;
위와 같은 상황에서 구지 b의 메모리를 할당해제 해주려고 하지 않아도 된다.
조건
1. class 이름과 반드시 동일한 이름이어야 한다.
2. return type이 존재하여서는 안된다.
하지만 매개변수는 받을 수 있으며 만약 매개변수를 선언했다면 반드시 객체 생성할때 값도 같이 넣어주어야 한다.
class Employee{
private String name;
public Employee(){
this.name="NoName";
}
public Employee(String name){
this.name=name
}
}