본문 바로가기

JAVA/개념

자바(JAVA) : 클래스

728x90
반응형

클래스(class)

자바에서 클래스(class)란 객체를 정의하는 틀 또는 설계도와 같은 의미로 사용됩니다.

자바에서는 이러한 설계도인 클래스를 가지고, 여러 객체를 생성하여 사용하게 됩니다.

 

클래스는 객체의 상태를 나타내는 필드(field)와 객체의 행동을 나타내는 메소드(method)로 구성됩니다.

즉, 필드(field)란 클래스에 포함된 변수(variable)를 의미합니다.

또한, 메소드(method)란 어떠한 특정 작업을 수행하기 위한 명령문의 집합이라 할 수 있습니다.

 

- 클래스 작성 규칙

  • 숫자로 시작하지 않는다
  • 첫글자는 대문자로 시작한다
  • 일반적으로 카멜 케이스(둘 이상의 단어가 연결 되었을 때, 두번째 단어의 첫글자는 대문자)를 사용한다
class Student
class CityCode
class ItemOrder
- 필드
객체지향 개념에서 속성에 해당하는 것으로 멤버 변수라고도 합니다. 구조는 다음과 같습니다.

private String name; 한정자 / 자료형 / 변수명

- 메서드
객체지향 개념에서 행위에 해당하는 것으로, 클래스를 사용하여 실행하는 동작입니다. 구조는 다음과 같습니다.

public int add(int a, int b) { 한정자 / 리턴값 / 함수명(매개변수 ,,,)
           return a + b;            리턴키워드 리턴값
}
 
접근 한정자 - 외부 클래스에서 해당 클래스에 접근하는 범위를 지정합니다. 범위는 아래 표와 같습니다.
 
 한정자 클래스 내부  동일 패키지  하위 클래스  그외 여역 
 public  o  o   o   o 
 protected  o   o   o   x 
 default (기본, 생략가능)  o   o   x   x 
 private  o   x   x   x 

 


인스턴스(instance)

자바에서 클래스를 사용하기 위해서는 우선 해당 클래스 타입의 객체(object)를 선언해야 합니다.

이렇게 클래스로부터 객체를 선언하는 과정을 클래스의 인스턴스 화라고 합니다.

또한, 이렇게 선언된 해당 클래스 타입의 객체를 인스턴스(instance)라고 합니다.

즉, 인스턴스란 메모리에 할당된 객체를 의미합니다.

 

자바에서는 하나의 클래스로부터 여러 개의 인스턴스를 생성할 수 있습니다.

이렇게 생성된 인스턴스는 독립된 메모리 공간에 저장된 자신만의 필드를 가질 수 있습니다.

하지만 해당 클래스의 모든 메소드(method)는 해당 클래스에서 생성된 모든 인스턴스가 공유하게 됩니다.

 

인스턴스 생성 방법

Student student = new Student(); 
클래스   참조변수  생성자

생성자

생성자는 클래스나 인스턴스를 생성할 때 호출하는 특수한 목적의 메서드입니다. 일반적으로 변수를 초기화하거나 필요한 다른 개체를 생성하는 작업을 처리합니다. new 키워드를 사용하여 객체를 생성하는 시점에 호출되며, 클래스는 하나 이상의 생성자를 가질 수 있습니다.

 

우리는 new라는 키워드를 통해서 객체를 생성할 때 

Student student =new Student(); 라는 표현으로 객체를 생성했습니다.

하지만 눈 여겨 보면 괄호가 있는 것을 확인 할 수 있지요.

분명 괄호를 쓰는 이유가 있을 겁니다. 메소드처럼 그 안에 데이터를 매개변수로 전달하거나 하는 이유가 있지 않을까요?

 

우리는 클래스로부터 객체를 생성할때 초기 데이터를 전달해줄 수 있습니다. 그것이 바로 생성자라고 합니다.

 

생성자는 객체가 생성될때 가장 처음 호출하는 메소드라고 보면 됩니다. 이 생성자는 꼭 호출이 됩니다. 그리고 객체가 생성되지요. 하지만 우리는 생성자를 선언하지 않았습니다. 하지만 객체를 만들 수는 있었죠.

 

왜 일까요? 우리가 명시적으로 생성자를 선언하지 않아도 자동으로 default 생성자를 알아서 자바가 정의해줍니다. 물론 아무 기능을 하지 않는 생성자로요.

 

생성자의 정의는 일반 메소드를 정의하는 것과 같지만

1. 반환값이 없습니다.
2. 생성자의 이름은 클래스의 이름과 정확히 같아야합니다.
3. 생성자는 매개변수에 따라 여러개가 정의 될 수 있습니다.
4. public이라는 접근제어자여야 합니다.

위의 Student은 아무 매개변수가 없는 Default 생성자가 자동으로 호출이 된 것입니다. 

 

<생성자 예제>

public class Student {
	private String name;
	private int age;

public Student() {        // 기본생성자
	name = "윤호";
	age = 20;
}

public Student(String name, int age) { // 파라미터가 있는 생성자
	this.name = name;
	this.age = age;
}
}

public class Main {

public static void main(String[] args) {

	Student student = new Student();

	System.out.println("학생의 이름 : " + student.getName()); // 윤호

	System.out.println("학생의 나이 : " + student.getAge());    // 20

	Student a = new Student("철수", 30);

	System.out.println("학생의 이름 : " + a.getName());          // 철수

	System.out.println("학생의 나이 : " + a.getAge());             // 30

}

}

메소드(method)

자바에서 클래스는 멤버(member)로 속성을 표현하는 필드(field)와 기능을 표현하는 메소드(method)를 가집니다.

그중에서 메소드(method)란 어떠한 특정 작업을 수행하기 위한 명령문의 집합이라 할 수 있습니다.

 

자바에서 메소드를 정의하는 방법은 다음과 같습니다.

접근제어자 반환타입 메소드이름(매개변수목록) { // 선언부

    // 구현부

}

1. 접근 제어자 : 해당 메소드에 접근할 수 있는 범위를 명시합니다.

2. 반환 타입(return type) : 메소드가 모든 작업을 마치고 반환하는 데이터의 타입을 명시합니다.

3. 메소드 이름 : 메소드를 호출하기 위한 이름을 명시합니다.

4. 매개변수 목록(parameters) : 메소드 호출 시에 전달되는 인수의 값을 저장할 변수들을 명시합니다.

5. 구현부 : 메소드의 고유 기능을 수행하는 명령문의 집합입니다.

 

자바에서는 하나의 클래스에 같은 이름의 메소드를 둘 이상 정의할 수 없습니다.

하지만 메소드 오버로딩(overloading)을 이용하면, 같은 이름의 메소드를 중복하여 정의할 수 있습니다.

메소드 오버로딩이란 매개변수의 개수나 타입을 다르게 하여 같은 이름의 또 다른 메소드를 작성하는 것입니다.

 

이러한 메소드 오버로딩을 사용함으로써 메소드에 사용되는 이름을 절약할 수 있습니다.

또한, 메소드를 호출할 때 전달해야 할 매개변수의 타입이나 개수에 대해 크게 신경을 쓰지 않고 호출할 수 있게 됩니다.

 

메서드 오버로딩, 오버라이딩

 

 마지막으로 자바의 객체지향 특성중 다형성과 관련된 기법인 메서드 오버로딩과 오버라이딩에 대하여 알아보겠습니다.

 

메서드 오버로딩

 메서드 이름을 동일하지만 파라미터가 다른 여러 메서드를 만드는 것을 말합니다.
메서드 오버로딩 특징

- 메서드 이름이 동일합니다.
- 파라미터의 개수 또는 자료형이 다릅니다.
- 파라미터는 같고 리턴 변수의 자료형이 다르면 오버로딩은 성립하지 않습니다.
 
메서드 오버로딩 예제
 
public class OverloadingEx {
	public int sum(int num1, int num2) {
		return num1 + num2;
	}

    public int sum(int num1, int num2, num3) {
        return num1 + num2 + num3;
    }

    public static void main(String[] args) {
        OverloadingEx  ex = new OverloadingEx();
        System.out.println(ex.sum(1,2));            // 3
        System.out.println(ex.sum(3,4,5));          // 12
    }
}

 

메서드 오버라이딩

 메서드 오버라이딩은 상위 클래스에서 정의한 메서드를 서브 클래스에서 재정의하는 것을 말합니다.
메서드 오버라이딩 특징

- 메서드 이름이 동일합니다.
- 파라미터와 리턴값이 동일합니다.
 
메서드 오버라이딩 예제
 
class Person {
  	public void run() {
      	System.out.println("뛴다");
      }
  }


 class Student extends Person {
     public void run() {
      	System.out.println("엄청 빨리 뛴다");
      }
  }

 public class Test {
  	public static void main(String[] args) {
  		Person person = new Person();
  		Student student = new Student();

  		person.run();    // 뛴다
  		student.runt();    // 엄청 빨리 뛴다
  	}
}
728x90
반응형

'JAVA > 개념' 카테고리의 다른 글

자바(JAVA) : 상속(inheritance)  (0) 2022.01.02
자바(JAVA) : this, this()  (0) 2022.01.02
JAVA 제어문 : 조건문(if) , 선택문(switch)  (0) 2021.12.31
JAVA 연산자, Instance Of  (0) 2021.12.30
JAVA 배열 (1차원배열, 2차원배열)  (0) 2021.12.30