안녕하세요
로로봉입니다. : )
오랫만에 JAVA 학습을 이어서해보려고 돌아왔습니다.
이번에는 클래스와 객체에 대해 알아보는 시간을 갖도록 하겠습니다.
1) 클래스 개념
자바는 객체지향형 프로그래밍 언어로, 클래스, 추상 클래스, 인터페이스와 같은 객체지향적 문법 요소를 사용해 프로그램을 구성합니다.
자바를 제대로 사용하려면 이런 문법 요소를 잘 이해하고 사용할 줄 알아야 합니다.
객체(Object)는 사용할 수 있는 실체를 의미하며, 클래스는 객체를 만들기 위한 틀과 같습니다.
따라서 1개의 정의된 클래스를 이용해 여러 개의 객채를 만들 수 있습니다.
자바에서 클래스를 사용하는 이유는 다양한 자료형과 구조체 등과 여러 기능적인 요소들을 묶어서 관리할 수 있을 뿐 아니라 데이터를 처리하는 다양한 기능까지 함께 관리하는 문법 요소입니다.
2) 절차지향과 객체지향
클래스와 객체를 좀 더 자세히 이해하기 위해선 객체지향을 이해하는 것이 중요합니다.
프로그램 개발에서 객체지향의 개념을 사용하기 전에는 대부분의 프로그램을 절차지향형으로 구현했습니다.
절차지향향의 대표적인 예로는 C언어가 있습니다.
절차지향형 프로그래밍은 순서에 맞춰 단계적으로 실행하도록 명령어를 나열하는 방식을 말합니다.
클래스를 사용한 후에는 객체지향형 프로그래밍 방식이 주로 사용되는데, 객체지향형은 객체 단위로 실행하는 방식을 말합니다.
객체지향 문법 요소에는 크게 나누면 클래스와 인터페이스가 있습니다.
3) 클래스 구조
클래스는 class 키워드와 함께 클래스명을 표기합니다. 보편적으로 클래스명은 대문자로 정의합니다.
class 클래스명 {
...
}
Test라는 클래스를 포함하는 자바 소스 파일 Test.java의 구조를 알아보겠습니다.
package ...; // 패키지
import ...; // 임포트
class 클래스명 {...} // 외부 클래스
publich class Test{
int a = 5; // 필드
double abc() {...} // 메서드
Test() {...} // 생성자
class 클래스명 {...} // 이너 클래스
}
------------------------------------------------------------------------------------------
- 패키지 : 프로젝트를 생성할 때 패키지를 지정했다면 이 구성 요소에 패키지명이 포함되며,
반드시 주석을 제외하고 첫 번째 줄에 위치해야 합니다. 클래스의 생성 과정에서
패키지를 생성하지 않았다면 디폴트 패키지를 사용하면 생략됩니다.
- 임포트 : 다른 패키지의 클래스를 사용하고자 할 때 포함됩니다.
이클립스에서는 Ctrl + Shift + O 단축키를 이용해 외부 패키지에 위치하고 있는
클래스를 자동으로 임포트할 수 있습니다. 위치는 패키지 다음에 위치하게 됩니다.
- 외부 클래스 : 클래스의 외부에 또 다른 클래스가 포함될 수 있습니다. 1개의 .java 파일에
여러 개의 클래스가 포함될 수 있습니다.
단, 외부 클래스에는 public 키워드를 붙일 수 없습니다.
- 필드 : 클래스의 속성을 나타내는 변수입니다.
- 메서드 : 클래스가 지니고 있는 함수를 나타냅니다.
- 생성자 : 클래스의 객체를 생성하는 역할을 합니다.
- 이너 클래스 : 클래스의 내부에도 클래스가 포함될 수 있습니다.
이러한 클래스를 이너 클래스라고 합니다.
------------------------------------------------------------------------------------------
4) 객체의 생성과 활용
객체는 new 키워드로 생성할 수 있습니다. 자바에서는 대부분읜 클래스가 이 방법으로 객체를 생성합니다.
클래스에 따라 메서드를 사용해 객체를 생성할 때도 있지만, 이 때도 해당 메서드 내부에서 new를 사용해 객체를 생성하게 됩니다.
클래스명 참조변수명 = new 생성자();
예시 : Test t = new Test();
객체 생성에 따라 메모리 구조는 아래와 같이 생성됩니다.
클래스 Test는 메모리의 클래스 영역, 참조 변수는 스택 영역에 들어갑니다. 내부 공간에는 실제 데이터의 위칫값을 저장합니다. 생성자로 만들어진 객체는 힙 메모리에 위치하며, 객체 내부에는 클래스의 멤버가 위치하게 됩니다.
실제 메서드 구현 코드는 클래스 영역 안에 저장해 놓고, 객체 안에서는 메서드 영역의 위치만 가리켜 호출하게 됩니다.
1개의 클래스로 만든 모든 객체는 속성은 달라도 메서드는 동일하기 때문입니다.
여러개의 객체를 만들어도 메서드는 한번만 만들면 된다는 뜻입니다.
위 그림에서 봤을 때는 t1은 select 속성 값에 'one', t2는 'two'로 저장되어있고, test_run() 메서드는 메서드 영역에 만들어 져있는 메서드를 호출하여 사용하게 됩니다.
속성 값은 달라도 메서드는 1개를 공유하여 사용한다고 보면 됩니다.
5) 객체 활용하기
이제 생성한 객체를 활용해보도록 하겠습니다. 객체를 활용한다는 것은 객체 내부의 멤버를 사용한다는 의미입니다.
예를 들어 필드를 사용한다는 것은 필드에 값을 넣거나 읽어온다는 것이고 메서드를 사용한다는 것은 해당 메서드를 호출하는 것을 말합니다.
자바에서는 힙 메모리에 직접 접근할 수 있는 방법이 없으며, 위치 정보를 포함하고 있는 참조 변수를 이용해서만 객체에 접근할 수 있습니다. 이때 사용하는 것이 포인트 연산자(.) 입니다.
포인트 연산자는 해당 위치에 있는 객체를 선택한다고 보면 됩니다.
포인트 연산자를 이용해 객체 내부의 멤버를 활용하는 방법은 아래와 같습니다.
참조 변수명.필드명
참조 변수명.메서드명()
위의 Test 클래스의 t1과 t2를 예로 들어 사용하는 방법은 아래와 같습니다.
package test;
class Test {
String select = "";
void test_run() {
select = "test_run";
}
}
publich class TestJava {
public static void main(String[] args) {
Test t1 = new Test();
Test t2 = new Test();
t1.select = 'one';
t2.select = 'two';
System.out.println(t1.select);
System.out.println(t2.select);
t1.test_run();
System.out.println(t1.select);
System.out.println(t2.select);
}
}
클래스 Test 를 t1과 t2 객채로 만들고 그 안에 속성 값도 변경해보고 메소드를 실행했을 때 어떻게 되는지 확인해보면 클래스에 대해 조금 더 쉽게 이해할 수 있습니다.
처음에는 햇깔릴 수 있지만 사용하다 보면 어떻게 저장되고 동작하는지 익숙해지게 됩니다.
t1객체만 test_run() 메서드를 실행하여 t1의 결과가 어떻게 변하는지 출력된 데이터로 확인이 가능합니다.
// 실행결과
one
two
test_run
two
t2도 test_run() 메서드를 호출하게 되면 t2.select의 값도 test_run으로 변하는 것을 볼 수 있습니다.
다음에는 클래스 내부 구성에 대해 좀더 자세히 알아보도록 하겠습니다.
좋아요 ♥ + 구독 부탁드립니다 : )
'개발 정보 > JAVA' 카테고리의 다른 글
[JAVA] 자바 클래스 내부 구성 - 메서드 (4) | 2022.04.22 |
---|---|
[JAVA] 자바 클래스 내부 구성 - 필드 (0) | 2022.04.19 |
[JAVA] 자바 커맨드라인을 통해 입력받기 (0) | 2021.07.29 |
[JAVA] 자바 가변 배열 및 배열 복사 (0) | 2021.07.12 |
[JAVA] 자바 다차원 배열 (0) | 2021.07.08 |
댓글