Java Section 07 : 클래스
01 객체 지향 프로그래밍
■ 객체 지향 프로그래밍(OOP) : 객체를 중심으로 프로그램 구조를 설계하고 프로그래밍하는 것
■ 객체 : 상태를 표현할 수 있고, 우리가 행동으로 실행할 수 있는 모든 것.
=> 자바는 객체를 기반으로 한 대표적인 프로그래밍 언어!
02 객체와 클래스
■ 클래스 : 자바의 기본단위. 하나의 클래스를 통해 여러 객체를 생성/사용
■ 구조 : Cat c = new Cat();
// 클래스명 객체명 = new 클래스명();
=> "new 연산자"를 이용해서 객체 생성
- 클래스는 보통 하나의 소스 파일에 하나의 클래스를 선언하지만 파일의 이름과 동일한 클래스만 public을 사용하고, 다른 클래스는 public을 제외한다면 2개 이상의 클래스를 하나의 소스 파일에 작성할 수 있다.
03 클래스의 구성
■ 클래스 구성 요소 : 필드(field), 메서드(method), 생성자(constructor)
-> 각 요소는 필요에 따라 생략하거나 2개 이상 작성 가능
① 필드(=멤버변수) : 객체가 가져야 할 데이터 상태를 저장하는 변수.
- 다른 클래스에서는 (예를 들어 main 함수) "객체명.필드명"을 통해 접근한다.
- 클래스 선언 시 필드의 값을 초기화 하지 않으면 객체 생성 시 자동으로 초기화 된다 (힙 메모리 영역이기 때문에!)
② 메서드 : 객체의 기능을 담당하는 중괄호{ } 블록.
- 1개의 메서드는 보통 1개의 기능 수행
반환타입 메서드명() {
// 코드 작성
}
- 리턴값이 있을 경우에는 리턴할 데이터의 형태가 무엇인지 메서드명() 앞에 반환 타입으로 반드시 기재
(void 제외 모두 리턴값 적기)
- 다른 클래스에서 메서드 사용 시 객체를 먼저 생성한 후, 참조변수를 통해 그 객체의 메서드를 사용한다.
클래스명 객체명 = 클래스명(); // 객체 생성
객체명.메서드명(); // 생성한 객체의 메서드 호출(사용)
- 메서드를 한 번 선언하면 여러 번 호출하여 사용 가능
- 메서드 이름은 기능을 알아보기 쉽도록 작성
③ 생성자 : 객체를 생성할 때 객체 변수를 초기화하는 역할 담당
클래스명 객체명 = new 클래스명();
에서 new 클래스명() 부분이 생성자에 속함.
- 필드와 메서드를 호출하는 등 객체를 사용하려면 객체 변수가 메모리에 올라가야 하는데, 이렇게 메모리에 객체 변수를 올려주는 역할을 생성자가 한다.
04 정적 멤버와 static
: 모든 객체의 필드 값이 같아야 할 경우 사용
■ 각 객체가 가지는 필드와 메서드를 인스턴스(객체) 멤버라고 하고, 모든 객체들이 공유하며 사용하는 하나의 필드와 메서드를 정적 멤버라고 한다.
■ 정적 멤버 : 필드와 메서드를 선언할 때 static이라는 키워드가 붙은 멤버
■ static : "객체와 무관하게"
- static이 붙이면 객체 생성 없이 바로 사용 가능 (프로그램 시작 시 바로 메모리에 올라감)
클래스명.필드;
클래스명.메서드();
- 정적멤버는 클래스명으로 접근하는 것을 추천