[JAVA] JAVA 클래스 기초 정리
이번엔 제 생각에 객체지향의 꽃이라고 생각되는 클래스에 대해서 알아보도록 하겠습니다.
아마 제 생각에 프로그래밍을 광적으로 좋아하시거나 천재가 아니라면 대부분 저 처럼 처음에는 이게 뭐지와, 앞에서 가르쳐 주시는 분이 뭐라고 하시는지 도저히 모르겠네 할 것 같습니다.
저 또한 대학교 2학년 때 JAVA 를 처음 배웠지만 단순히 학점을 잘 받기 위해 달달 외우기만 했을 뿐 실제로 이해하지는 못했었습니다. 그래도 이후에 전공 수업에서 JAVA 를 이용해서 주제를 정해 프로그램을 만드는 프로젝트를 할 때 되어서야 이런 개념들이 이해가 되었습니다.
즉 제가 드리고 싶은 말은 개념을 어느 정도 숙지한 이후에 직접 주제를 정해 코딩을 해봐야 한다는 것입니다. 그러므로 개념을 익히신 후에 JAVA 를 이용한 개발자가 되고자 하신다면 자신이 흥미를 가질만한 것을 주제로 꼭 프로그램을 하나 만들어 보시기 바랍니다. 혹은 github 와 같은 곳에서 자신이 원하는 프로그램을 JAVA 로 만든 것이 있다면 그 코드를 참고해서 분석해 보시길 바라겠습니다.
그래서 JAVA 클래스의 개념과 특징들에 대해서 알아보도록 하겠습니다.
JAVA 에서 클래스란?
사실 클래스가 꼭 JAVA 에서만 사용되는 것은 아닙니다만 객체지향과 클래스와 같은 개념들은 JAVA 가 가장 유명합니다. 그래서 제가 대학에서 배울 때만 하더라도 객체지향 = JAVA
일 정도였습니다. 즉 그 만큼 JAVA 에서의 클래스라는 존재는 매우 각별합니다.
일반적으로 클래스는 프로그램에서 사용될 객체의 틀을 정의하며, 객체를 생성하기 위한 설계도 역할을 합니다.
클래스는 여러가지 멤버 변수와 메서드를 포함하며, 이들을 적절히 구성하여 객체의 동작을 정의합니다.
클래스 내부 구성 요소
1. 필드
필드는 클래스에 포함된 변수
로, 객체의 속성값을 지정할 수 있습니다. 객체의 속성값을 지정할 수 있다고 해서 각 객체의 타입이 int 나 String 과 같은 이런 속성이 아니라 객체를 생성하고자 하는 클래스의 역할에 필요한 클래스의 전역 변수를 설정하는 것으로 이해하시면 될 것 같습니다.
예시로 만약 Student
라는 클래스를 만들게 된다면 학생 속성(정보)를 나타내기 위해서 나이(int age = 15) 등이 포함될 수 있을 것입니다.
그리고 필드 변수는 선언 시 Heap 메모리에 생성이 되며, JVM 이 자동으로 삭제해 주는 Stack 메모리에 생성되는 지역 변수와는 달리 필드 변수는 객체가 사라지지 않는한 메모리에서 필드 변수는 사라지지 않습니다. 그래서 전역으로 사용되는 객체의 경우 사용이 끝날 경우에는 무조건 null 처리를 해주어야 추후에 GC(Garbage Collection) 가 수행되면서 메모리 확보를 진행하게 됩니다.
2. 메서드
클래스가 지니고 있는 기능(함수)을 나타냅니다.
1) 메서드 정의
- 리턴 타입은 메서드 종료 이후 반환되는 값의 자료형을 의미합니다.
- 리턴이 void 가 아닐 때 메서드 안에는 반드시
return 리턴값
의 코드가 있어야 합니다. - 리턴 타입이 void 일 때, return 은
메서드를 종료하라.
는 의미입니다.
메서드명은 변수명 선정 규칙과 동일하며, 소문자로 시작하는 것이 관례입니다.
2) 메서드 호출
- 클래스 외부에서 메서드 호출
- 클래스 외부에서 메서드를 사용하려면 먼저 객체를 생성해야 합니다.
- 객체를 생성하지 않고도 메서드를 사용하고자 한다면
static
을 붙여야 합니다.
- 클래스 내부에서 메서드 호출
- 클래스 내부에 있는 메서드끼리는 객체를 생성하지 않고 서로를 호출할 수 있습니다.
자바제어자 리턴타입 메서드명(입력 매개 변수) {
메서드 내용
}
public int sum(int a, int b) {
// 수행 코드
}
3. 생성자
생성자는 클래스의 객체를 생성하는 역할을 담당합니다. 객체 생성 시 필드 초기화가 필요할 경우 사용됩니다.
생성자 작성 시 지켜야 할 문법적 규칙 두 가지
- 반드시 클래스명과 동일한 이름으로 지어야 합니다.
- 리턴 타입이 없습니다.
클래스 이름(입력파라매터) {
}
4. 내부 클래스(inner class)
클래스의 내부에도 클래스가 포함될 수 있으며 이를 내부 클래스라고 합니다.
5. this, 와 this()
1) this 키워드
this 키워드는 인스턴스가 자기 자신을 참조하는 데 사용하는 변수입니다. this 키워드는 이 클래스를 기반으로 생성된 해당 인스턴스의 주소를 가리킵니다.
클래스 내부에서 this 를 생략하면 컴파일러가 자동으로 this 를 추가해 줍니다.
this 를 주로 사용하는 경우는 필드와 지역 변수를 모두 사용할 수 있고, 이름이 같을 때 사용합니다. 앞의 상황에서 컴파일러는 구분을 해주지 않으면 모두 지역 변수로 인식을 하기 때문에 this 를 이용해서 필드 변수를 따로 구분을 해주어야 합니다. 따라서 넘겨받은 지역 변수와 필드명이 동일할 때는 필드일 경우 this 를 붙여 표기해야 합니다.
2) this() 메서드
this() 메서드는 제 경험상 그렇게 많이 사용되지는 않는 듯 하여 간단하게 이런게 있구나 하는 정도로만 알아보도록 하겠습니다.
this() 메서드는 자신이 속한 클래스 내부의 다른 생성자를 호출합니다. this() 메서드를 이용해 중복을 제거할 수 있습니다.
클래스를 사용하는 이유
- 코드의 재사용성 : 클래스를 사용하면 유사한 기능을 하는 코드를 여러 곳에서 쉽게 재사용할 수 있습니다. 클래스를 이용해 작성된 코드를 다른 프로그램에서도 활용할 수 있어 개발 시간을 단축시키고 코드의 일관성을 유지할 수 있습니다.
- 유지 보수성의 향상 : 클래스를 사용하면 관련 있는 코드를 논리적으로 그룹화하여 구조적으로 정리할 수 있습니다. 이렇게 구조화된 코드는 유지보수가 쉬워집니다. 즉 클래스를 사용하면 코드의 가독성과 유지보수성이 향상됩니다.
- 코드의 안정성 : 각 클래스는 자체적으로 캡슐화되어 있어 다른 클래스와 독립적으로 작동합니다. 클래스는 자신의 메서드와 속성만을 외부에서 접근할 수 있게 제한할 수 있기 때문에, 코드의 안정성이 향상됩니다.
마치며
JAVA 의 클래스에 대해서 알아보았습니다. JAVA 는 java 파일 자체가 하나의 클래스로써 작동하도록 되어 있는 구조라 JAVA 에서의 클래스는 불가피하다고 볼 수 있습니다. 이에 따라 JAVA 클래스의 구성 요소들과 대략적인 클래스의 정의 등을 알아보았습니다.
앞으로 클래스와 관련된 여러 개념들을 다룰 예정이며, 이번 포스트에서는 JAVA 의 클래스는 이런거구나 하고 넘어가시면 될 것 같습니다.
포스트 읽어주셔서 감사드리며, 잘못된 내요이나 오타 궁금하신 내용이 있으시다면 댓글 부탁드리겠습니다.
Comments