-
JAVA | 클래스 구성(필드, 생성자, 메소드)programming/JAVA 2020. 5. 16. 00:06
객체와 클래스
자바에서는 클래스를 설계도라고 생각한다. 클래스에는 객체를 생성하기 위한 필드와 메소드가 정의되어 있다.
클래스에서 만들어진 객체를 해당 클래스의 인스턴스(instance)라고 하고, 객체를 만드는 과정을 인스턴스화 라고 한다.
하나의 클래스로부터 여러 개의 인스턴스를 만들 수 있다 (ex.동일한 설계도로부터 여러 대의 자동차를 만드는 것)
객체 지향 프로그래밍 개발의 세 가지 단계
- 클래스 설계
- 설계된 클래스를 가지고 사용할 객체 생성
- 생성된 객체를 이용
객체 생성과 클래스 변수
클래스로부터 객체를 생성하는 방법은 new 연산자 사용
* new는 클래스로부터 객체를 생성시키는 연산자이다. new 연산자 뒤에는 생성자가 오는데, 생성자는 클래스() 형태를 가지고 있다.
* new연산자는 힙 영역에 객체를 생성시킨 후, 객체의 주소를 리턴하도록 되어있다.
(생성된 객체를 사용하려면 위치를 알아야 하기 때문)
주소를 참조 타입인 클래스 변수에 저장해 두면, 변수를 통해 객체를 사용할 수 있다.
또는 클래스 변수 선언과 객체 생성을 한 개의 실행문으로 작성할 수도 있다.
t1과 t2가 참조하는 test1 객체는 완전히 독립된 서로 다른 객체이다.
* 클래스의 용도
클래스는 두 가지 용도가 있다. 하나는 라이브러리(API)용이고 다른 하나는 실행용이다.
라이브러리 클래스는 다른 클래스에서 이용할 목적으로 설계된다.
프로그램 전체에서 사용되는 클래스가 100개라면 99개는 라이브러리고 단 하나가 실행 클래스다.실행 클래스는 프로그램의 실행 진입점인 main()메소드를 제공하는 역할을 한다.
- 라이브러리와 실행 클래스가 단 하나의 클래스로 구성될 수도 있지만 대부분은 분리되어 있다.
클래스의 구성
구성 멤버에는 필드, 생성자, 메소드가 있으며 생략되거나 복수 개가 작성 될 수 있다.
필드객체의 고유 데이터, 부품 객체, 상태 정보를 저장하는 곳
선언 형태는 변수(variable)와 비슷하지만, 필드를 변수라고 부르지 않는다.
변수는 생성자와 메소드 내에서만 사용되고 생성자와 메소드가 실행 종료되면 자동 소멸되지만
필드는 생성자와 메소드 전체에서 사용되며 객체가 소멸되지 않는 한 객체와 함께 존재한다.
* 필드를 사용한다는 것은 필드값을 읽고, 변경하는 작업을 말한다.
클래스 외부에서 사용할 경우 우선적으로 클래스로부터 객체를 생성한 뒤 필드를 사용해야한다.
- 필드는 객체에 소속된 데이터이므로 객체가 존재하지 않으면 필드도 존재하지 않기 때문이다.
생성자
생성자는 new 연산자로 호출되는 특별한 중괄호 {} 블록이다.
필드를 초기화 하거나, 메소드를 호출해서 객체를 사용할 준비를 한다.
생성자는 메소드와 비슷하게 생겼지만, 클래스 이름으로 되어 있고 리턴타입이 없다.
*this
매개 변수의 이름이 너무 짧으면 코드의 가독성이 좋지 않기 때문에 가능한 필드 이름과 비슷하거나 동일한 이름으로 사용할 것을 권함
이 경우 필드와 매개변수의 이름이 동일하기 때문에 생성자 내부에서 해당 필드에 접근 할 수 없다.
왜냐하면 동일한 이름의 매개 변수가 필드보다 사용 우선 순위가 높기 때문이다.
해결 방법은 this. 를 붙이면 된다. this는 객체 자신의 참조! 즉, 객체 자신을 this 라고 한다.
ex. public Korean(String name, String ssn){
this.name = name;
this.ssn = ssn;
}
name 는 필드
name 은 매개 변수
메소드
메소드는 객체 간의 데이터 전달의 수단으로 사용된다. 외부로부터 매개값을 받을 수도 있고 실행 후 값을 리턴 할 수도 있다.
참고 자료 - 이것이 자바다
'programming > JAVA' 카테고리의 다른 글
JAVA | 상속(Inheritance) (0) 2020.05.21 JAVA | 접근 제한자 (public, protected, default, private) (0) 2020.05.21 JAVA | 싱글톤 패턴 (Singleton Pattern) (0) 2020.05.20 JAVA | 객체 지향 프로그래밍(OOP : Object Oriented Programming) (0) 2020.05.15 JAVA | JAVA란? (0) 2020.05.13