자바의 Class 알아보자!

학습 목표: 자바의 Class에 대해 이해해보자!

클래스(Class)

객체지향 프로그래밍(OOP)

현실 세계의 사물을 객체로 보고, 객체의 속성과 기능을 바탕으로 프로그래밍하는 방법이다.

클래스란?

객체지향 프로그래밍에서 객체를 정의해주는 틀이다. 즉, 객체의 속성과 기능을 하나로 묶어놓은 틀이다.

클래스는 단지 객체를 생성하는데 사용될 뿐, 객체 그 자체는 아니다. 즉, 클래스를 통해 객체화 되어야 실제로 객체를 사용할 수 있다.

클래스의 명명규칙

  • 클래스명은 보통 명사형태로 적는다.
  • 영문 대문자로 시작하도록 한다.

클래스 정의하는 방법

  • 하나의 java파일 안에 다수의 클래스를 정의할 수 있다.
  • 하지만 public 키워드가 붙은 class는 단 하나만 존재해야 하고, 이 클래스 이름은 파일 이름과 동일해야 한다
class Student {
	//속성(멤버변수)
	String name;
	String age;
	//기능(메서드)
	void study(){
		System.out.println("공부를 한다.");
	}
}

객체(인스턴스)

객체란?

클래스에 정의된 내용대로 실제 메모리(heap)에 생성된 것을 의미한다.

객체의 구성요소(member)

객체는 여러개의 속성과 기능의 집합이다.

  • 속성 (멤버변수)
  • 기능 (메서드)

객체를 생성 & 초기화 (new연산자)

  1. 연산자 new에 의해서 메모리(heap)에 Student클래스의 인스턴스가 생성된다.
  2. 생성자 Student()가 호출되어 인스턴스 변수를 초기화한다.
  3. 연산자 new의 결과로, 생성된 Student인스턴스의 주소가 반환되어 참조변수 s1에 저장된다.
//클래스명 변수명;
//변수명 = new 클래스명();
Student s1;
s1 = new Student();

//클래스명 변수명 = new 클래스명();
Student s1= new Student();

//초기화
s1.name = "이름";
s1.age = 27;

객체의 속성(멤버변수)&기능(메서드) 사용하는 방법

참조변수 s1과 구분자(.)를 이용해 인스턴스 변수와 인스턴스 메서드에 접근,호출하여 사용할 수 있다.

//참조변수.멤버변수
s1.name; // 이름

//참조변수.메서드
s1.study(); // 공부를 한다. 출력

객체 배열

많은 수의 객체를 다뤄야할 때 사용한다. 객체 배열 안에 객체가 저장되는 것이 아니라 각 객체의 주소가 저장된다.

//참조변수 배열(객체 배열)을 생성
Student[] sArr = new Student[3]; 

//배열 초기화
//방법1
sArr[0] = new Student();
sArr[1] = new Student();
sArr[2] = new Student();
//방법2
Student[] sArr = { new Student(), new Student(), new Student()}
//방법3
for(int i = 0; i < sArr.length; i++){
	sArr[i] = new Student();
}

메서드 (Method)

메서드의 명명규칙

  • 일반적으로 동사 형태를 사용한다
  • 영문 소문자로 시작하도록 권장한다.

메서드를 사용하는 이유

  1. 코드의 높은 재사용성
  2. 중복된 코드의 제거

메서드 정의하는 방법

메서드는 특정 작업을 수행하는 일련의 문장들을 하나로 묶은 것이다.

선언부와 구현부로 이루어져 있다.

public int add(int x, int y) { //매개변수
	int result = 0; //지역변수
	result = x + y;
	return result;
}

선언부 구성요소

  • 접근 제어자

    public , protected , default , private

  • 반환 타입

    반환값의 타입을 적는다.(반환값이 없는 경우 ‘void’를 적는다.)

  • 메서드 이름

    변수의 명명규칙을 따르며 동사인 경우가 많다.

  • 매개변수 선언

    메서드가 작업을 수행하는데 필요한 값들을 제공받기 위한 것이다.

    ( 참고: 매개변수도 메서드 내에 선언된 것으로 간주되므로 ‘지역변수’이다. )

구현부 구성요소

선언부 다음에 오는 괄호{}부분 → 메서드 호출시에 수행될 문장들이 적혀있다.

  • 지역변수

    매서드 내에 선언된 변수이며 메서드 내에서만 사용할 수 있다.

    (참고 : 서로 다른 메서드라면 같은 이름의 변수를 선언해도 된다.)

  • return 문

    값의 타입은 반환타입과 일치하거나 자동 형변환이 가능한 것이어야 한다.

    현재 실행중인 메서드를 종료하고 호출한 메서드로 되돌아간다.

    (참고 : 매개변수는 여러개 일 수 있어도 반환값은 최대 하나만 허용한다. )

Static 메서드

클래스가 메모리에 로드될 때 자동적으로 생성되기 때문에, 객체를 생성하지 않고도 ‘클래스 이름.static메서드 이름();’로 호출할 수 있다.

반면에 인스턴스 메서드는 인스턴스가 반드시 존재해야 사용할 수 있다.

같은 클래스 내의 메서드끼리는 참조변수를 사용하지 않고도 서로 호출이 가능하지만 static메서드는 같은 클래스 내의 인스턴스 메서드(인스턴스 변수)를 호출할 수 없다. 호출하는 시점에 인스턴스가 생성되지 않았을 수 있기 때문이다.


생성자 (Constructor)

생성자란?

인스턴스가 생성될 때 호출되며 인스턴스 변수를 초기화하는 메서드이다.

생성자 정의하는 방법

  1. 생성자의 이름은 클래스의 이름과 같아야 한다.
  2. 생성자는 리턴값이 없다.

생성자도 오버로딩이 가능하기 때문에 하나의 클래스에 여러개의 생성자가 존재할 수 있다.

  • 기본 생성자

    매개변수도 없고 아무런 구현 내용이 없는 생성자이다.

    클래스에 정의된 생성자가 ‘하나도’ 없을 때 컴파일러가 자동으로 추가하여 컴파일해준다.

      Student() { }
    
  • 매개변수가 있는 생성자

    인스턴스를 생성하는 동시에 매개변수로 받은 값으로 인스턴스변수들을 초기화 할 수 있다. → 간결하고 직관적인 코드로 만들 수 있다.

      Student(String name, int age) {
      	this.name = name;
      	this.age = age;
      }
    

[주의!] - 연산자 new가 인스턴스를 생성하는 것이지 생성자가 인스턴스를 생성하는 것이 아니다. 인스턴스 변수의 초기화를 하기위해 사용하는 메서드일 뿐!

this 키워드란?

this와 this()는 비슷하게 생겼지만 완전 다른 것이다.

this는 ‘참조변수’이고 this()는 ‘생성자’이다.

  • this → ‘참조변수’

    인스턴스 자기 자신을 가리키는 ‘참조변수’로, 해당 인스턴스의 주소가 저장되어 있다.

    this는 모든 인스턴스메서드에 지역변수로 숨겨진 채로 존재한다.

    주로 생성자에서 인스턴스 변수와 매개변수의 이름이 같을 때, 인스턴스변수 앞에 this를 붙여 구분해준다.

  • this(), this(매개변수) → ‘생성자’

    인스턴스 변수를 초기화하는 ‘생성자’로, 같은 클래스 내에서 다른 생성자를 호출할 때 사용한다.

    1. 생성자의 이름으로 클래스 이름 대신 this를 사용한다.
    2. 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출이 가능하다.
      class Car{
      	String color; //인스턴스 변수
      	int door; //인스턴스 변수
    
      	Car(){
      		//door = 2; -> 초기화 작업이 무의미해진다.
      		this("black", 4);
      	}
    
      	Car(String color){
      		//Car(color, 4); -> 이렇게 X
      		this(color, 4);
      	}
        	
      	Car(String color, int door){ //매개변수
      		this.color = color; //여기 this는 생성자가 아니라
      		this.door = door; //인스턴스 자기 자신을 가리키는 '참조변수'이다.
      	}
      }
    

Categories:

Updated:

Leave a comment