🎇클래스
객체지향프로그래밍
객체 간의 상호작용을 통해 프로그램을 짜는 것.
객체 간의 상호작용 : 객체 간에 메서드 호출을 통해 입력값을 넣고, 반환값을 받도록 하는 것.
객체와 클래스
-
객체 : 속성을 가지며, 식별이 가능한 것.
- 객체는 속성과 동작으로 구성되어 있다.
- 자바에서 객체는 속성을 필드(field), 동작을 메서드(method)라고 한다.
-
객체 간의 관계
- 사용 관계 : 사람 - 자동차
- 집합 관계 : 자동차 - 엔진, 바퀴, 차체
- 상속 관계 : 기계 > 자동차
-
클래스 : 객체의 설계도
- 하나의 소스 파일 당 하나의 public 클래스를 선언하며 두이름은 동일하다.
-
객체 생성과 클래스 변수
- new 연산자 사용하여 객체를 생성.
- 클래스타입 객체명 = new 클래스타입();
-
클래스의 선언
public class 클래스명 { }
-
클래스의 구성 멤버
필드, 생성자, 메서드
🎇필드
필드
- 객체의 현재 상태.
- 지역변수와 구분하기 위해 '멤버 변수'라고도 한다.
필드 선언
타입 필드명 [= 초기값];
- 초기값이 지정되지 않은 필드는 초기값이 선언과 동시에 자동 생성된다.
🎇생성자
생성자
기본 생성자
- 별도로 클래스에 생성자를 정의하지 않은 경우 컴파일러가 자동으로 기본 생성자를 생성해준다. 이는 객체 생성 시 생성자가 필수적으로 필요하기 때문이다.
- 그러나, 클래스에 개발자가 직접 정의한 생성자가 1개라도 존재하는 경우 컴퍼일러는 기본 생성자를 추가하지 않는다.
this
- 메서드 안에 내부적으로 정의된 지역 변수로, 객체 자신의 참조값을 저장하고 있다.
this.필드명 : 객체 자신의 멤버변수 값을 의미한다.
생성자 오버로딩
- 클래스 안에 매개변수가 다른 여러개의 생성자를 정의하기 위한 기능.
- 생성자 간에 오버로딩을 위해서는 매개변수 타입, 순서, 갯수가 달라야 한다.
- 대신에 순서의 경우 두 매개변수 타입이 달라야 한다.
- 즉, 생성자 메서드 호출 시, 입력된 매개변수 타입이 오버로딩 된 생성자 중 가장 가까운 것이 호출된다.
this()
- 객체 내 정의된 다른 생성자 호출
- 생성자 오버로딩이 많아짐에 따라 생성자 간에 중복된 코드가 발생할 수 있다.
- 이러한 중복 코드를 줄이기 위해서는 this()를 사용한다.
- this()는 자신의 다른 생성자를 호출하는 코드로 반드시 생성자의 첫 줄 에서만 허용된다.
🎇메서드
메서드
메서드 정의
리턴타입 메서드명 (매개변수, ...) { 실행코드 }
- 매개변수란? : 메서드 호출 시 메서드 선언부의 매개변수에 순서대로 대입되어 메서드 블록 실행 시에 이용된다.
메서드 리턴타입
- 리턴 타입 O : return 예약어 + 리턴값(리턴 타입과 동일하거나 허용범위가 작은 값 또는 그러한 값을 담은 변수)
- 리턴 타입 X : return 예약어 생략이 가능하며, 사용 시 메서드 강제 종료를 의미한다.
가변 매개변수
- 메서드 정의 시, 매개변수의 갯수를 몇 개 정의할 지 애매한 경우 매개변수를 배열 타입으로 선언해준다.
Ex) int sum(int[] values)
- ...(가변 매개변수) : 여러 개의 값을 매개변수로 받을 수 있도록 내부적으로 배열로 받도록 된 매개변수이다.
Ex) int sum(int ... values) → 호출 시, sum(값1,값2,값3, ...) 이런식으로 호출해준다.
메서드 호출
참조변수명.메서드명()
- 객체 내부에서 자체 메서드 호출 시 메서드명으로만 호출이 가능하다.
- 객체 외부에서 메서드 호출 시, 객체 생성 후 해당 객체의 메서드를 호출해줘야 해당 객체의 메서드가 호출 된다.
메서드 오버로딩
- 메서드 이름이 같고, 매개변수의 갯수 또는 타입이 다른 경우 메서드 오버로딩이 가능하다.
- 단, 반환 타입은 오버로딩을 구현하는데 아무런 영향을 미치지 못한다.
- 메서드 오버로딩의 대표적인 예로는 'System.out.println()' 메서드가 있다.