클래스란?
객체의 속성(변수)와 기능(메서드)를 기술한, 객체를 만들기 위한 설계도.
클래스 선언
1. 사용하고자 하는 객체 구상
2. 객체의 대표 이름을 하나 결정하고 이것을 클래스 이름으로 한다.
3. "클래스이름.java"로 소스파일 생성
4. 클래스 선언 키워드 사용
public class 클래스이름 {
}
일반적으로 소스파일 하나 당 클래스 선언 하나.
그 이상 선언하면 컴파일 시 바이트코드 파일(.class)가 선언한 개수만큼 생긴다.
즉, 소스 파일은 클래스 선언을 담고 있는 저장 단위일 뿐, 클래스 자체가 아니다.
하지만 소스 파일 이름과 동일한 이름의 클래스 선언에만 public 접근 제한자를 붙일 수 있다.
클래스 명명규칙
1) 하나 이상의 문자로 이루어 질 것
2) 첫 번째 문자에는 숫자가 올 수 없다
3) '$' '_' 외의 특수 문자 금지
4) 자바 예약어(키워드) 사용 금지
5) 첫 자를 영어 대문자로 작성하는 것이 관례
객체 생성과 클래스 변수
클래스를 선언한 다음 컴파일을 했다면 객체를 생성할 설계도가 다 만들어졌다.
클래스로부터 객체를 생성할 때는 new 연산자를 쓰면 된다.
new 클래스();
//여기서 클래스()는 생성자이다.
new 연산자 : 클래스로부터 객체를 생성(객체화, 인스턴스화)시키는 연산자.
객체를 메모리 힙(Heap) 영역에 생성시키고 객체의 주소를 리턴한다.
이 주소를 참조 타입인 클래스 변수에 저장해두면, 변수를 통해 객체를 사용할 수 있다.
클래스의 용도
1. 라이브러리(API: Application Program Interface)용
다른 클래스에서 이용할 목적으로 설계
2. 실행용
프로그램의 실행 진입점인 main() 메서드를 제공하는 역할
* 대부분 객체 지향 프로그램은 라이브러리와 실행 클래스가 분리되어있다.
클래스의 구성 멤버
- 필드(Field)
객체의 고유 데이터, 부품 객체, 상태 정보를 저장하는 곳.
로컬 변수는 생성자와 메서드 안에서만 사용되고 생성자와 메서드가 실행 종료되면 자동 소멸하지만
필드(클래스 멤버 변수 = 인스턴스 필드 + static 필드)는 객체 전체에서 사용되며 객체가 소멸할 때 소멸된다.
필드는 선언할 때 값을 줘도 되고, 생성자를 통해 초기화해줘도 된다.
인스턴스 필드는 선언이나 생성자로 값을 주지 않아도, 객체 생성시 자동으로 기본 초기값으로 설정된다. 즉, 초기화를 안해줘도 된다.(static 필드는 X)
클래스 외부에서 필드를 사용하고자 할 경우엔, 우선 객체를 생성하고 도트(.) 연산자로 필드에 접근한다.
Car myCar = new Car();
myCar.speed = 60;
- 생성자(Constructor)
new 연산자와 같이 사용되어 클래스로부터 객체를 생성할 때 호출되어, 객체의 초기화를 담당한다.
객체 초기화란 필드를 초기화하거나, 메서드를 호출해서 객체를 사용할 준비를 하는 것을 말한다.
생성자를 호출하지 않고는 클래스로부터 객체를 생성할 수 없다.
따라서 모든 클래스는 생성자가 반드시 존재하며, 하나 이상 가질 수 있다.
클래스를 만들 때 생성자 선언을 생략하면 컴파일러가 자동으로 기본 생성자를 만들어준다.
//기본 생성자
[public] 클래스() { }
클래스의 접근 제한자에 따라 생성자에도 접근제한자가 붙는다.
그러나 클래스에 생성자 선언이 하나라도 있다면, 컴파일러는 기본 생성자를 추가하지 않는다.
그러므로 기본 생성자가 필요하다면 꼭 적어주도록 하자.
public class Korean {
//필드
String nation = "대한민국"; //필드 선언할 때 값 주기
String name;
//생성자
public Korean(String n) {
name = n; //생성자로 초기화
}
}
- 메서드(Method)
객체의 동작=객체가 할 수 있는 기능.
객체 간의 데이터 전달의 수단으로 사용된다. 외부로부터 매개값을 받을 수도 있고, 실행 후 어떤 값을 리턴할 수도 있다.
메서드 선언은 선언부(Signature)와 실행 블록(구현부)으로 이뤄진다.
리턴타입 메소드이름 ([매개변수선언]) { --> 선언부
//실행문 작성 --> 구현부
}
가끔 매개 변수의 수를 모를 경우가 있다.
이 때는 매개 변수를 배열 타입으로 선언하거나 "..."를 사용해서 선언하면 된다.
리턴타입이 있는 (=void가 아닌) 메서드는 반드시 return문을 사용해서 리턴값을 지정해야한다.
return 후 메소드는 바로 종료되므로 return문 후에는 실행문을 작성하지 말 것.
리턴타입이 없는 void 메서드에서도 메서드 종료용으로 사용할 수 있다.
'old > Java' 카테고리의 다른 글
싱글톤(Singleton) (0) | 2020.11.15 |
---|---|
인스턴스 멤버와 정적 멤버 (0) | 2020.11.15 |
참조 타입 - 열거 타입(enumeraion type, ENUM) (0) | 2020.11.15 |
참조 타입 (0) | 2020.11.15 |
참조 타입 - 배열 타입 (0) | 2020.11.15 |