클래스

소희·2022년 8월 8일
0

자바 기초 스터디

목록 보기
5/8
post-thumbnail

학습할 것

  • 클래스 정의하는 방법
  • 객체 만드는 방법 (new 키워드 이해하기)
  • 메소드 정의하는 방법
  • 생성자 정의하는 방법
  • this 키워드 이해하기

클래스의 개념


클래스와 객체

  • 객체를 만들어 내기 위한 설계도 또는 틀과 같은 의미로 사용됩니다.
  • 클래스 모양 그대로 생성된 실체를 객체라고 합니다.

인스턴스(instance)

  • 클래스로부터 객체를 선언하는 과정을 클래스의 인스턴스화라고 합니다.
  • 하나의 클래스로부터 여러 개의 인스턴스를 생성할 수 있습니다.

클래스의 구성

필드

  • 객체 내에 값을 저장할 멤버 변수를 필드라고 합니다.
  • 클래스 내에서 선언된 위치에 따라 클래스변수, 인스턴스변수, 지역변수로 구분됩니다.

메소드

  • 메소드는 함수이며 객체의 행동을 구현합니다.

생성자

  • 클래스의 이름과 동일한 메소드를 생성자라고 합니다.
  • 생성자는 객체가 생성될 때 자동으로 호출되는 특별한 메소드입니다.
  • 즉, 객체의 생성과 동시에 인스턴스 변수를 원하는 값으로 초기화할 수 있는 메소드를 생성자라고 합니다.

클래스의 선언

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


인스턴스 생성

위와 같이 선언된 클래스를 가지고 Car 객체의 인스턴스를 생성할 수 있습니다.

레퍼런스 변수 선언

객체를 참조하기 위한 참조 변수를 먼저 선언합니다.

선언

클래스이름 객체참조변수이름;

예제

Car myCar;

new연산자로 객체 생성

그 후에 new 키워드를 사용하여 인스턴스를 생성하고, 해당 인스턴스의 주소를 미리 선언한 참조 변수에 저장하여 사용합니다.

선언

객체참조변수이름 = new 클래스이름();

예제

myCar = new Car();

레퍼런스 변수 선언과 동시에 객체 생성

레퍼런스 변수 선언과 객체 생성은 동시에 할 수 있습니다.

선언

클래스이름 객체참조변수이름 = new 클래스이름();

예제

Car myCar = new Car();

메소드의 개념


메소드(method)

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

메소드의 사용 목적

클래스에서 메소드를 작성하여 사용하는 이유는 중복되는 코드의 반복적인 프로그래밍을 피할 수 있기 때문입니다.
또한, 모듈화로 인해 코드의 가독성도 좋아집니다.
그리고 프로그램에 문제가 발생하거나 기능의 변경이 필요할 때도 손쉽게 유지보수를 할 수 있습니다.

메소드를 작성할 때는 되도록 하나의 메소드가 하나의 기능만을 수행하도록 작성하는 것이 좋습니다.

메소드 정의

클래스에서 메소드를 정의하는 방법은 일반 함수를 정의하는 방법과 크게 다르지 않습니다.

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

예제

class Car {
    private int currentSpeed;
    private int accelerationTime;
    ...

public void accelerate(int speed, int second) { // 선언부
        // 구현부
        System.out.println(second + "초간 속도를 시속 " + speed + "(으)로 가속함!!");
    }
    ...
}

메소드 호출

정의한 메소드는 멤버 참조 연산자(.)를 사용하여 호출할 수 있습니다.

문법

1. 객체참조변수이름.메소드이름(); 
	👆 매개변수가 없는 메소드의 호출
2. 객체참조변수이름.메소드이름(인수1, 인수2, ...); 
	👆 매개변수가 있는 메소드의 호출

다음 예제는 앞서 정의한 accelerate() 메소드를 호출하는 예제입니다.

예제

Car myCar = new Car();
	👆 객체를 생성함
myCar.accelerate(60, 3);
	👆 myCar 인스턴스의 accelerate() 메소드를 호출함

다음 예제는 실제로 accelerate() 메소드를 정의하고 호출하는 예제입니다.

예제

class Car {
    private int currentSpeed;
    private int accelerationTime;
    public void accelerate(int speed, int second) {
        System.out.println(second + "초간 속도를 시속 " + speed + "(으)로 가속함!!");
    }
}
public class Method01 {
    public static void main(String[] args) {
        Car myCar = new Car();   
        myCar.accelerate(60, 3); // 메소드 호출
    }
}

실행 결과

3초간 속도를 시속 60(으)로 가속함!!

생성자


생성자란?

객체를 만드는 특별한 메소드

코드 예

우리는 이미 생성자를 사용했습니다. 아래 코드에서 생성자를 찾아봅시다.

Car car0 = new Car();
Car car1 = new Car();
Car car2 = new Car();

정답은 new Car() 입니다.

생성자의 역할

생성자는 두가지 역할을 합니다.

  1. 객체 생성 - 객체를 만드는 것
  2. 객체 초기화 - 객체의 필드 값을 설정하는 것

이전 방식

👇 1. 객체 생성
Car myCar = new Car();

👇 2. 필드 초기화
myCar.name = "카니발";
myCar.money = 3180;
myCar.color = "white";

활용 방식

👇 객체 생성과 동시에 초기화
Car myCar = new Car("카니발", 3180, "white");

생성자 호출과 정의

public static void main(String[] args) {
		Car myCar = new Car("카니발", 3180, "white");
	}
	
	static class Car {
		String name;
		int money;
		String color;
		
		Car(String n, int m, String c) {
			name = n;
			money = m;
			color = c;
		}
	}

생성자 호출

Car myCar = new Car("카니발", 3180, "white");

생성자 정의

일반 메소드와 차이는 리턴 타입이 없다는 것입니다.

static class Car {
		String name;
		int money;
		String color;
		
		Car(String n, int m, String c) {
			name = n;
			money = m;
			color = c;
		}
}

this 키워드 이해하기


this란?

  • this는 자기 자신을 의미하는 키워드입니다.
  • 필드(전역변수)와 메서드/생성자의 매개변수가 동일할 때 인스턴스 필드임을 명시하기 위해 사용합니다.

this 특징

전역변수(인스턴스 필드)와 지역변수(매개변수) 구분

class Student {
	String name;
    int age;
    
    Student(String name, int age) {
    	this.name = name; 👈 this.name는 인스턴스 필드 / name는 매개변수를 의미
        this.age = age; 👈 this.age 인스턴스 필드 / age는 매개변수를 의미
  • static 메서드에서는 this를 사용하지 못합니다.
  • 인스턴스 멤버(메소드, 필드)는 인스턴스를 생성해야지만 사용이 가능합니다.
  • 매개변수와 필드의 변수명이 다른 경우 굳이 this를 쓰지 않아도 됩니다.

this와 this()의 차이점

class Student {
	String name; 👈 인스턴스 필드(전역변수)
    int age;
    
    Student() {
    	this("철수", 4); 👈 Student(String name, int age) 생성자를 호출
    }
    
    Student(String name) {
    	this(name, 4); 👈 Student(String name, int age) 생성자를 호출
    }
    
    Student(String name, int age) {
    	this.name = name;
        this.age = age;
    }
}
  • this()는 같은 클래스의 다른 생성자를 호출할 때 사용하는 키워드
  • 생성자 오버로딩시에 this()를 이용한 중복코드 제거 가능

this를 사용하는 이유

소스가 복잡해지고 방대해지면 변수를 관리하기 힘들고, 필드와 매개변수를 동일하게 정의하여 this로 구분하는 것이 직관적이고 편리합니다.

출처

https://danmilife.tistory.com/19
http://www.tcpschool.com/java/java_class_declaration
http://www.tcpschool.com/java/java_methodConstructor_method
https://cloudstudying.kr/lectures/197
https://leeph.tistory.com/29

0개의 댓글