자바는 객체지향 프로그래밍이라고들 한다.
그럼, 객체는 뭘까? 고유한 기능(동작)과 값(데이터)을 가진 녀석이라고 할 수 있다. (변수[필드] + 함수[메소드])
우리가 몇 번 사용해봤던 Random객체는 간단히 임의의 값을 만들어 내는 능력을 가진 녀석.
String객체는 문자열을 관리하는 능력을 가진 녀석.
Scanner객체는 키보드로 입력된 값을 자료형 별로 받아주는 능력을 가진 녀석. 으로 요약해볼 수 있겠다.
위 Random, Scanner, String이라는 객체의 능력을 구분하는 명칭을 class라고 한다.
즉, 객체의 종류를 class라고 한다. 또는 객체의 자료형을 class라고 한다. (변수의 종류를 자료형이라고 하듯)
자바에서는 이러한 클래스들을 기능별로 약 2000여개 정도 만들어두었다고 한다.(정확하지 않음)
이러한 클래스들을 사용하려면 객체로 만들어서 사용해야만 한다.
class를 사용하는 것이 아니라 class를 통해 객체를 만들어서 사용해야 한다는 것이다.
자바는 이러한 객체들을 필요할 때 적절히 불러서 사용하는 방식으로 프로그래밍하는 것이다.
다시 말하면, 이 2000여개의 클래스들을 얼마나 적재적소에 잘 사용하는지가 중요하다.
하지만, 자바에서 이미 만들어둔 클래스가 2000여개가 있더라도 언제나 내가 원하는 기능들이 존재할 수 없기 때문에
새로운 기능들을 가진 클래스를 본인들이 직접 만들어야 하는 경우가 많다.
이것을 사용자 정의 클래스라고 한다.
그리고 클래스는 멤버 함수만 가질 수도 있고 멤버 변수만 가질 수도 있다.
그리고 이 클래스를 만드는 위치는 총 4군데에서 가능하다.
1. 별도의 java파일에 만들기
2. 하나의 java파일 안에 여러 개의 클래스 작성
3. 어떤 클래스 안에 클래스를 설계
4. 메소드 안에 클래스를 설계
1번의 경우 별도로 만든 java문서로 만든 class 중에 public이 있는 클래스는 반드시 파일명과 클래스명이 같아야한다.
2번의 경우 말 그대로 클래스 밖에 또다른 클래스를 작성하는 것이다.
특히, 3번의 경우를 이너 클래스를 설계하는 것이라고 하는데 반드시 소속을 명시하면서 사용해야 한다.
또한, 이너 클래스는 외부에서 직접 new를 통해 객체를 만들어 사용이 불가능하다.
4번의 경우는 이너 클래스와 비슷한 느낌이지만 이를 지역 클래스라고 하고
이렇게 이름이 지어진 이유는 다들 어렵지 않게 추측할 수 있을 것이다.
C언어에서 어떤 함수 안에 있는 변수를 우리는 지역 변수라고 하듯 어떤 메소드 안에 있는 클래스를 지역 클래스라고 한다.
public class AAA {
void hello() {
System.out.println("Hello");
}
class BBB{
hello();
}
void nice() {
System.out.println("Nice");
class DDD {
int a;
}
CCC c1 = new CCC() {
void show() {
System.out.println("show, show, show");
}
}
}
class CCC {
void show() {
System.out.println("show");
}
}
이는 짧게 위 경우를 함축한 예제 코드이다.
AAA라는 클래스는 분명 AAA.java라는 파일로 만들어졌을 것이고 이는 1번의 경우일 것이다.
2번의 경우는 CCC클래스라고 보면 된다. AAA.java로 만들어진 문서 안에서 다른 클래스를 작성한 것이다.
3번의 경우, BBB클래스이다. AAA클래스 안에 BBB라는 클래스를 새로 설계한 모습이다.
4번의 경우는 DDD클래스이다. nice()라는 메소드 안에 클래스를 작성했기 때문이다.
여기서 nice()메소드 안에 CCC클래스가 있는데 사용하는 모습이 특이하다.
이 클래스는 익명 클래스라고 하는 것인데 안드로이드에서 자주 보일 모양의 코드이다.
이 클래스는 (여기서는) 지역 클래스이기도 하다. 왜냐하면 메소드안에 있기 때문이다.
익명 클래스를 사용하는 이유는 내가 사용할 클래스의 일부 기능을 수정해서 사용할 때,
한 번만 사용하고 다른 위치에서는 사용하지 않을 때가 있다.
이렇게 두고 보니 사실 클래스는 어느 위치에서든 작성이 가능하다.
'Language > Java' 카테고리의 다른 글
자바에서의 메소드 (0) | 2022.03.10 |
---|---|
자바의 패키지 (0) | 2022.03.07 |
자바의 배열(Array) (0) | 2022.02.23 |
Java에서의 String 소개 - 3 (0) | 2022.02.15 |
Java에서의 String 소개 - 2 (0) | 2022.02.11 |