티스토리 뷰
<학습할 것>
- 클래스 정의하는 방법
- 객체 만드는 방법 (new 키워드 이해하기)
- 메서드 정의하는 방법
- 생성자 정의하는 방법
클래스 정의하는 방법
클래스의 의미
변수 : 하나의 데이터를 저장
배열 : 같은 종류의 여러 데이터를 하나의 집합으로 저장
구조체 : 서로 관련된 여러 데이터를 종류에 관계없이 하나의 집합으로 저장
클래스 : 데이터와 함수의 결합 (구조체 + 함수)
클래스 정의하는 방법
class Time{
int hour; // 인스턴스 변수
int minute;
int second;
static String clokc = "Rolex"; // 클래스 변수 (static, 공유 변수)
void method(){
int hour = 0; // 지역 변수
}
}
| 변수의 종류 | 선언위치 | 생성시기 |
| 클래스 변수 | 클래스 영역 | 클래스가 메모리에 올라갈 때 |
| 인스턴스 변수 | 인스턴스가 생성되었을 때 | |
| 지역변수 | 클래스 영역 이외의 영역 | 변수 선언문이 수행되었을 때 |
접근 제어자
자바에서는 클래스를 정의하기 class 키워드를 사용하며, 외부 클래스가 해당 클래스에 접근하는 범위를 접근 지정자를 통해 제한할 수 있다.
접근 지정자는 public, protected, default, private 네 가지가 있다.
public : 전체 패키지에서 공유 가능
protected : 같은 패키지 및 다른 패키지에서 상속했을 경우 사용 가능
default : 같은 패키지 내에서만 사용 가능
private : 자신의 클래스에서만 사용 가능
객체 만드는 방법 (new 키워드 이해하기)
클래스를 정의했다면 클래스로부터 객체를 만들어 사용해야 한다. 이러한 과정을 클래스의 인스턴스화라 정의한다.
객체는 new 키워드를 이용해 생성이 가능하다. new 키워드를 이용하면 메모리 힙 영역에 데이터를 저장할 영역을 할당 받은 후 해당 영역의 주소를 객체에게 반환하여 객체를 사용할수 있도록 만들어준다.
객체를 생성하기 위해 사용하는 것이 클래스의 구조 중 하나였던 생성자이다.
메서드 정의하는 방법
메서드를 사용할 때 static을 붙이는 것 과 붙이지 않는 것의 차이는 무엇일까?
static을 붙히면 멤버변수를 사용하지 않고 매게 변수로 값을 받아서 처리할 수 있다.
하지만 아래와 같이 붙히지 않아도 매게 변수를 받아서 사용할 수 있는데, 둘의 차이는 static을 붙히지 않은 메서드는 실행 시 호출되어야 할 메서드를 찾는 과정이 추가적으로 필요하기 때문에 시간이 더 소요된다.
public class Math {
static int add(int a, int b) {
return a + b;
}
int add(int a, int b) {
return a + b;
}
}
생성자를 정의하는 방법
변수를 선언하고 초기화하는 것과 마찬가지로 클래스를 생성하고 객체를 호출할 때 객체를 초기화하기 위해 사용되는 것이 생성자이다.
생성자는 기본 생성자, 묵시적 생성자, 명시적 생성자로 구분된다.
- 기본 생성자 : 클래스 내부에 선언된 생성자가 없는 경우 객체 생성 시에 컴파일러가 자동으로 추가해 주는 생성자이다.
- 묵시적 생성자 : 파라미터 값을 가지지 않는 생성자이다.
- 명시적 생성자 : 파라미터 값을 가지는 생성자이다.
class Person() {...} -> 기본 생성자 호출
class Person() {
//묵시적 생성자
public Person() {
System.out.println("생성되었습니다.");
}
//명시적 생성자
public Person(String name, int age){
this.name = name;
this.age = age;
}
}
생성자는 몇가지 특징을 가지고 있다.
- 생성자는 리턴 타입을 가지지 않는다.
- 생성자는 클래스 이름과 동일하다.
- 모든 클래스는 생성자가 반드시 존재하고, 한개 이상의 생성자를 가진다.
- 클래스 내부에 생성자를 선언하지 않으면 컴파일러가 기본 생성자를 선언해 사용한다.
- 명시적 생성자만 선언돼있는 경우 파라미터가 없는 생성자를 사용하고 싶다면 묵시적 생성자를 선언해주어야 한다. (생성자가 클래스 내부에 선언되어 있기 때문에 기본 생성자가 생성되지 않는다.)
'개발 > Java' 카테고리의 다른 글
| [Java] 패키지 (0) | 2023.06.14 |
|---|---|
| [Java] 상속 (0) | 2023.06.08 |
| [Java] 제어문 (0) | 2023.06.05 |
| [Java] 자바 데이터 타입, 변수 그리고 배열 (0) | 2023.06.02 |
| [Java] JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가. (0) | 2023.06.01 |