Language/Java

[Java] 클래스

깐니 2020. 12. 19. 11:45

목차

1. 클래스 정의하는 방법
2. 객체 만드는 방법 (new 키워드 이해하기)
3. 메소드 정의하는 방법
4. 생성자 정의하는 방법
5. this 키워드 이해하기


객체지향프로그래밍 (Object-oriented-programming) 을 하기 위해서는 객체라는 개념에 대해 먼저 알아야한다.

객체는 우리 생활에서 보면 강아지, 컴퓨터, 책 등이 모두 객체이다.
이런 객체를 객체 지향 기술의 핵심 개념이라고 한다.
객체는 '상태'와 '동작'을 가지고 있다.
예를 들면, 강아지라는 객체의 상태는 '이름', '품종','털색깔' 등이 될 수 있고, 객체의 동작은 '먹는다', '잔다','짖는다'등이 될 수 있다.

소프트웨어에서는 이러한 객체의 상태와 동작을 각각 필드(field)와 메소드(method)라고 한다.
클래스(class)는 객체에 대한 설계 (명세서)이며, 객체 지향 소프트웨어의 기본 단위이다.

 

1. 클래스 정의하는 방법

 

class puppy {
	
    private String name;		//이름
    private String age;			//나이
    private String breed;		//품종
    
    public puppy(){
    
    }
    public void eat(){
    	System.out.println("eat");
    }
    public void sleep(){
   	System.out.println("sleep");
    }
    public void talk(){
   	System.out.println("talk");
    } 
 }
    

* 필드 정의 : 객체의 상태(속성)을 나타낸다.
* 메소드 정의 : 객체의 동작을 나타낸다.

 

2. 객체 만드는 방법 (new 키워드 이해하기)

위에서 설계한 클래스로 객체 (인스턴스)를 만들어보자.
자바에서는 객체를 생성하기 위해 new 연산자를 사용한다.

Puppy myPuppy;		//참조변수선언
myPuppy = new Puppy();	//선언한 참조변수에 new 연산자를 통해 Puppy 객체 생성후, 반환된 참조값 저장

1.  Puppy 클래스의 객체를 참조할 수 있는 참조변수 myPuppy를 선언한다.

2. new 연산자를 이용해서 Puppy 클래스의 객체를 생성한다.
   -> 이때, new 연산자는 동적 메모리 할당을 통해 객체를 생성하고, 객체의 참조값을 반환한다. ( heap 메모리에 할당)
        즉,  객체가 생성된 메모리 주소를 반환한다.

3. = 연산자로 참조 변수  myPuppy와 객체를 연결한다.
   -> myPuppy에 저장된 값은 객체가 생성된 메모리의 주소값이다.

 

3. 메소드 정의하는 방법

메소드는 클래스 안에 선언된 특정한 작업을 수행하는 문장들의 모임이다.

<접근제어자> <반환형> <메소드의 이름> (<매개변수1의 자료형><매개변수1의 이름>, <매개변수2의 자료형><매개변수2의 이름> ....){
	
    //메소드 구현
}
public void eat(){

}

public String getName(String name){
	
    this.name = name;
    return name;
}

 

  • 각 메소드는 작업에 필요한 데이터를 입력받아서 처리한 후 결과를 반환한다.
  • 각 메소드는 오직 하나의 작업만을 하도록 작성하는 것이 좋다.
  • 반환형은 메소드가 반환하는 데이터의 타입을 지정하며, 어떤 타입도 가능하다.
    만약, 반환값이 없는 경우, void 라고 지정한다.
  • 외부에서 매개 변수를 통해 값을 전달할 수 있다.

 

4. 생성자 정의하는 방법

생성자란?

  • 객체가 생성될 때 객체를 초기화하는 특수한 메소드이다.
  • 클래스 이름과 동일한 메소드이다.
  • 반환값을 선언하지 않는다. 
class Puppy {

    String name;
    String breed;
    
    public Puppy (){
    
    }
    public Puppy (String name){
    	this.name = name;
    }
    public Puppy (String name, String breed){
    	this.name = name;
        this.breed = breed;
    }
    
    public static void main(String[] args){
    	Puppy tanee  = new Puppy();
        Puppy hoochu = new Puppy("후추");
        Puppy ddolee = new Puppy("똘이", 11);
    }
        
    

위의 예제 코드와 같이 생성자는 메소드 오버로딩이 가능하다.
객체 hoochu의 경우, 객체가 new 에 의해 생성될 때, "후추"의 값이 생성자의 value로 전달되고, value값이 name에 대입된다.

참조변수 = new 클래스이름(인수);
  • 참조변수 : 생성되는 객체를 가리키는 변수
  • 클래스이름 :  현재 생성되는 클래스 이름으로, ()가 붙으면 생성자가 된다.

  • 만약 클래스가 생성자를 가지지 않는다면, 자바에 의해 제공되는 기본 생성자를 사용한다.
    따라서, 어떤 클래스든지 생성자가 호출된다는 것을 알 수 있다.

  • new 연산자는 새로 생송된 객체를 가리키는 참조값을 반환하고, 이 참조값이 참조변수에 저장된다.

 

5. this 키워드 이해하기

1. this 키워드는 인스턴스 자기 자신을 가리키는 키워드이다.
2. this 키워드는 클래스를 기반으로 생성된 인스턴스를 가리키는 참조이다.

 

 

 

Ref.

📕 어서와 JAVA는 처음이지 - 천인국