Java : An Object-Oriented Language
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 Definition
한개의 .java 파일 내에는 여러개의 class가 정의 가능 하지만 오지 하나의 클래스만이 public class 이름을 달을 수 있음 또한 public class 내에는 main method가 들어가 있어야 함
원래는 다음의 과정을 거치었어야 함
$ javac Lecture.java
=> javac 로 컴파일 하면 .class 파일이 생성됨
$ java Lecture
=> main method of class 가 실행됨
Java
복사
하나의 클래스 안에는 변수와 함수가 정의되어야 함
class Employee{
String name; // variable of class
public void setName(String name){ // method of class
this.name = name;
}
public String getName(){
return this.name;
}
}
Java
복사
Instance Variable
•
instance variable
class 내부에서 static이 붙지 않은 변수, 멤버 변수를 의미함
•
Access Modifier
1.
public : __같은 패키지, 서브 클래스, 다른 클래스__에서 접근 가능(1등)
2.
protected : __같은 패키지, 서브 클래스__는 접근 가능(2등)
3.
그냥 이름 : __같은 패키지__에 있는 클래스에서 사용가능(3등)
4.
private : 정의 된 클래스에서만 접근 가능(4등)
•
this
public void setName(String name){ // method of class
this.name = name;
}
Java
복사
되어 있는 것을 볼 수 이는데 이것은 매개변수와 클래스 인스턴스변수를 구분하기 위한 자기 클래스에 존재하는(this) 이라는 명령어이다.
Access Modifiers
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);
}
}
Java
복사
위의 코드에서는 main 함수내에서 Employee 클래스 내의 name 변수를 직접 접근할 수 있는 것을 보여준다.
하지만 만약 name 변수가 private String name으로 정의하였다면 main에서 접근하지 못한다.
그렇다면 도대체 무엇을 위해 이러한 정의를 만들었을까? 그것은 바로 프로그램에서 에러가 나는 경우를 줄이기 위해서이다.
Methods
•
Method Header
1.
access modifier : public, protected, private, (no keyword)
2.
return type
return을 하는 경우에만 적어주면 됨, 안하면 그냥 void로
3.
method name
함수이름 : 관용은 첫단어는 소문자 두번째 단어는 대문자 시작
4.
arguments
(클래스명 매개변수명) 으로 하여서 ','로 구분하여 매개변수를 넘기어 줌
class Employee{
String name; // variable of class
public void setName(String name){ // method of class
this.name = name;
}
public String getName(){
return this.name;
}
}
Java
복사
이를 호출하는 경우
public class Lecture{
public static void main(String[] args){
Employee m = new Employee();
m.setName("Peter"); //이런식으로 멤버변수에 접근 할 수 있게 함
System.out.pirntln(m.getNmae());
}
}
Java
복사
•
Encapsulation
이러한 행위를 캡슐화라고 부른다. 다른 사람이 내 클래스에서 접근하는 방법을 정해 놓음으로써 내부의 정보를 지키고 에러를 줄이는 방법이다.
이를 위해서 외부에서 반드시 호출할 필요가 있는 함수만 public
이를 제외한 함수와 변수는 모두 private 으로 설정한다.
Creating an Object
public class Lecture{
public static void main(String[] args){
Employee m = new Employee();
m.setName("Peter");
System.out.pirntln(m.getNmae());
}
}
Java
복사
new Employee() 라고 괄호를 여는 이유는 constructor of class가 호출되기 때문이다. 하지만 우리는 아직 constructor을 선언해 놓지 않았기 때문에 default constructor이 호출된다.
Deleting an Object
자바에는 automatic garbage collection이 존재하기 때문에 C++ 처럼 메모리 해제를 해주지 않아도 된다.
ex>
String a = new Stinrg("A");
String b = new Stinrg("B");
b=a;
Java
복사
위와 같은 상황에서 구지 b의 메모리를 할당해제 해주려고 하지 않아도 된다.
Constructor
조건
1.
class 이름과 반드시 동일한 이름이어야 한다.
2.
return type이 존재하여서는 안된다.
하지만 매개변수는 받을 수 있으며 만약 매개변수를 선언했다면 반드시 객체 생성할때 값도 같이 넣어주어야 한다.
•
Method overloading
Constructor을 비롯한 class Method들은 오버로딩이 가능하다. 그렇기에 반환형과 매개변수를 기준으로 여러개의 class Method를 정의할 수 있다.
class Employee{
private String name;
public Employee(){
this.name="NoName";
}
public Employee(String name){
this.name=name
}
}
Java
복사