이 글은 이것이 자바다를 참고하여 작성되었습니다.
: 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있고 다른 것과 식별 가능한 것
- 속성과 동작으로 구성
- 속성 : 필드(field)
- 동작 : 메소드(method)
: 자바에서 객체를 만들기 위한 설계도
- 인스턴스(instance) : 클래스로부터 만들어진 객체
- 클래스로부터 객체를 생성하는 방법 : new 연산자 사용
new 클래스();
클래스() : 생성자- new 연산자는 힙 영역에 객체를 생성시킨 후 객체의 주소를 리턴하도록 되어 있다. 이 주소를 참조 타입인 클래스 변수에 저장해 두면, 변수를 통해 객체를 사용할 수 있다.
클래스 변수 = new 클래스();- 클래스는 하나의 실행 클래스와 다수의 라이브러리 클래스로 이루어진다.
- 라이브러리 클래스는 다른 클래스에서 이용할 목적으로 설계된다.
- 실행 클래스는 프로그램의 실행 진입점인 main() 메소드를 제공하는 역할을 한다.
: 객체의 데이터가 저장되는 곳
- 변수 vs 필드
- 변수는 생성자와 메소드 내에서만 사용되고 생성자와 메소드가 실행 종료되면 자동 소멸
- 필드는 생성자와 메소드 전체에서 사용되며 객체가 소멸되지 않는 한 객체와 함께 존재
- 클래스 내부에서 사용할 경우 : 필드 이름으로 읽고 변경
- 클래스 외부에서 사용할 경우 : 클래스로부터 객체를 생성한 뒤 필드 사용
- 필드와 매개변수의 이름이 같을 때 매개변수의 사용 우선순위가 높기때문에 필드 앞에 "this."를 붙인다.
: 객체 생성 시 초기화 역할 담당
클래스(객체변수선언, ...) { // 객체의 초기화 코드 }
- 클래스 이름으로 되어 있고 리턴 타입이 없다.
- 생성자를 실행시키지 않고는 클래스로부터 객체를 만들 수 없다.
- 클래스에 명시적으로 선언한 생성자가 한 개라도 있으면 컴파일러는 기본 생성자를 추가하지 않는다.
- 다른 생성자 호출(this())
: 생성자 오버로딩이 많아질 경우 생성자 간의 중복된 코드가 발생할 수 있다. 이때 필드 초기화 내용을 한 생성자에만 집중적으로 작성하고 나머지 생성자는 초기화 내용을 가지고 있는 생성자를 호출하는 방법으로 개선할 수 있다.클래스([매개변수선언,...]) { this(매개변수,...,값,...); // 클래스의 다른 생성자 호출 실행문; }this()는 반드시 생성자의 첫줄에서만 허용된다.
: 객체의 동작에 해당하는 실행 블록. 선언부와 실행 블록으로 구성된다.
리턴타입 메소드이름 ([매개변수선언,...]) { 실행할 코드를 작성하는 곳 : }
- 선언부 - 메소드 시그너처(signature)
- 리턴 타입 : 메소드가 리턴하는 결과 타입 표시
- 메소드 이름
- 매개변수선언 : 메소드가 실행할 때 필요한 데이터를 받기 위한 변수
- {} : 메소드 실행 블록
리턴 타입
- 리턴값이 없는 메소드 : 리턴 타입 - void
- return문을 사용하면 메서드 실행을 강제 종료시킨다.
만약 while문을 사용할 때 뒤에 실행문이 추가적으로 더 있을 경우, return문을 이용하면 즉시 메소드가 종료되기때문에 반드시 break문을 사용해야 한다.- 리턴값이 있는 메소드 : 리턴 타입 - 리턴값의 타입
- 매개변수의 수를 모를 경우 : 매개변수를 배열 타입으로 선언
int sum1(int[] values) {}
이 경우 메소드를 호출하기 전에 배열을 생성해야 하는 불편한 점이 있다. 그래서 배열을 생성하지 않고 값의 리스트만 넘겨주는 방법도 있다.
int sum2(int ... values){}
호출 시 리스트로 나열해주면 된다.
int result = sum2(1, 2, 3);- 리턴 타입이 있는 메소드는 반드시 리턴(return)문을 사용해서 리턴값을 지정해야 한다. return문이 실행되면 메소드는 즉시 종료된다.
메소드 호출
- 클래스 내부의 다른 메소드에서 호출할 경우 : 메소드 이름으로 호출
- 클래스 외부에서 호출할 경우
: 클래스로부터 객체를 생성한 뒤 참조 변수를 이용해서 메소드 호출
클래스 참조변수 = new 클래스(매개값,...);
객체가 생성되었다면 참조 변수와 함께 도트(.) 연산자를 사용해서 호출참조변수.메소드(매개값,...); // 리턴값이 없거나, 있어도 리턴값을 받지 않을 경우 타입 변수 = 참조변수.메소드(매개값,...); // 리턴값이 있고, 리턴값을 받고 싶을 경우
인스턴스 멤버와 this
- 인스턴스 멤버 : 객체(인스턴스)를 생성한 후 사용할 수 있는 필드와 메소드. 각각 인스턴스 필드, 인스턴스 메소드라고 부른다.