객체지향프로그래밍(OOP, Object Oriented Programing)을 할 때 Class를 많이 접하게 된다.
이런 Class에 대해 정리해보았다.
1. Class란 무엇인가.
먼저 Class가 무엇인지를 알아야 하는데 간단하게 보면 큰 틀이라고 볼 수 있다.
여러 타입의 변수들을 담고 또한 메소드(함수)등을 담을 수 있는 하나의 틀이라고 생각하면 되는데,
c를 배웠던 사람이면 구조체를 생각하면 이해하기가 편하다.
c에서의 구조체는 다른 타입의 변수들을 하나의 덩어리로 사용하기 위해 쓰여지는데 OOP에서의 Class는
조금 더 확장하여 각기 다른 타입의 변수 뿐만 아니라 함수들도 담아 사용할 수 있게 하였다.
Class는 OOP의 특징을 보여주게 되는데 캡슐화, 상속, 다형성, 추상화를 모두 찾아 볼 수 있다.
캡슐화는 Class의 구조를 보면 알 수 있으므로 밑에서 정리하고, 상속은 클래스간의 상속이 있을 수 있으며 다형성도 띄고 있다. 추상화 또한 찾아볼 수 있다.
2. Class의 구조
이러한 Class가 어떻게 구성되어있는지 알아보자.
class [클래스 이름] {
// field 영역
// constructor(생성자) 영역
// method 영역
}
class 하고 만들고싶은 클래스명을 쓴 뒤 내부 구조는 위와 같이 크게 세 영역으로 볼 수 있다.
(java파일을 만들 때 클래스명과 파일명을 동일하게 해야한다. 다를시 컴파일 불가)
field라는 영역은 객체를 사용할 떄 지속적으로 사용는 변수들을 이곳에 선언한다. 전역변수라고도 한다.
field영역에 선언하는 변수들은 거의 private로 선언하게 되는데 이는 캡슐화를 위해 외부에서 접근하지 못하게 private으로 선언하여 사용한다. 외부에서 직접적으로 접근이 불가하므로 메소드를 통해 사용되어진다. 종류로는 일반적인 지역변수와 똑같이 instance, static 두 종류가 있고 차이점은 객체의 생성여부에 따라 달라진다.
constructor, 생성자는 단어 그대로 class가 생성될 때 제일 먼저 호출되어 실행되는 함수이다. 가장 먼저 호출되어 지기 떄문에 field에 선언한 변수들의 초기화가 이곳에서 이루어진다. 종류에는 따로 정의하지 않아도 제공되는 default생성자가 있고 사용자가 직접 명시하여 사용하는 사용자 정의 생성자가 있다. default 생성자는 객체를 등록하는 일을 하게되는데 사용자가 명시적으로 정의하여 생성자를 만들게되면 기본적으로 제공되는 생성자는 호출이 되지 않는다. (주로 public으로 지정)
method영역에는 함수들이 정의되는데 field에 접근할 수 있게 해주는 함수들도 이곳에 정의된다. 그런 함수들을 setter/getter라 하는데 setter/getter와 main같은 경우에는 public으로 지정한다. 그 외 함수들은 사용되는 기능에 따라 각각 지정하면 된다. 함수에도 마찬가지로 instance method와 static method가 있는데 instance에는 this라는 키워드가 존재한다. 이름 그대로 하는 기능은 instance field와 static field를 관리하는 역할을 한다. (this에 대해서는 따로 정리하도록 하겠다.)
생성자는 사용자들이 사용하고자함에 따라 오버로딩이 가능한데 오버로딩과 오버라이딩에 대한 자세한 내용은 다른 글에서 다루도록 하고 오버로딩에 대해 간단하게 쓰자면 함수의 이름은 똑같지만 리턴타입이 다르거나 매개변수의 갯수, 타입이 다른 함수를 만드는게 오버로딩이다.
생성자를 오버로딩하게 되면 객체만 생성하는 경우와 직접적으로 매개변수에 값을 보내 필드를 초기화 시키는 일을 모두 할 수 있게한다.
class Test{
private int a;
private int b;
public Test() {
}
public Test(int a, int b) {
this.a = a;
this.b = b;
}
public void setA(int a) {
this.a = a;
}
public int getA() {
return this.a;
}
public void setB(int b) {
this.b = b;
}
public int getB() {
return this.b;
}
}
이와 같은 식으로 생성자를 두가지로 나눠 기본 생성자와 setter/getter를 사용하는 경우와 사용자 정의 생성자를 사용하여 바로 getter를 호출해서 쓸 수 있게 하는 두 가지의 방법을 제공할 수 있다.
이상으로 글을 마치고 다음글로 this와 오버로딩/오버라이딩을 작성할 예정이다.
(부족한 점이나 틀린점이 있다면 댓글로 부탁드립니다. 다른 글과 마찬가지로 정답이 아닌 주관적인 정리입니다.)
'Language > Java' 카테고리의 다른 글
[JAVA]급여관리 프로그램 (0) | 2021.02.12 |
---|---|
[JAVA] this에 대해 (0) | 2021.02.03 |
[JAVA] Method호출 방식(Call by Reference, Name, Value) (0) | 2021.02.02 |
[JAVA]반, 학생 수 를 입력받는 성적 프로그램 (0) | 2021.02.01 |
[JAVA] 별찍기 (0) | 2021.01.30 |