자바를 자바 07 (Class)

TonyHan·2020년 9월 23일
0

20) 자바

목록 보기
6/27

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
	}
}

Class Definition

한개의 .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

  • 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;
	}

되어 있는 것을 볼 수 이는데 이것은 매개변수와 클래스 인스턴스변수를 구분하기 위한 자기 클래스에 존재하는(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);
	}
}

위의 코드에서는 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;
	}
}

이를 호출하는 경우

public class Lecture{
	public static void main(String[] args){
		Employee m = new Employee();
        m.setName("Peter"); //이런식으로 멤버변수에 접근 할 수 있게 함
        System.out.pirntln(m.getNmae());
	}
}
  • 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());
	}
}

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;

위와 같은 상황에서 구지 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
	}
}
profile
신촌거지출신개발자(시리즈 부분에 목차가 나옵니다.)

0개의 댓글