ultra_dev
이것이 자바다 CH6-1(클래스) 본문
☑️ 객체 지향 프로그래밍
- 객체들을 만들고 조합해서 프로그래밍을 설계, 완성하는 기법
- 객체간 상호작용으로 동작
☑️ 객체 : 물리적으로 존재하거나 개념적인 것 중에서 다른 것과 식별 가능한 것
- 속성과 동작으로 구성
- 필드와 메소드로 구성
- 객체간의 관계
- 집합 관계 : 자동차와 부품같은 관계. 작은 객체들을 모아 큰 객체를 만듦
- 사용 관계 : 다른 객체의 필드를 읽고, 변경하거나 메소드를 호출하는 관계 ex)사람과 계산기
- 상속 관계 : 부모 자식 관계 ex) 자동차와 기계
- 매개값(parameter) : 메소드가 실행할 때 필요한 값
- 리턴값 : 메소드의 실행의 결과, 호출한 곳으로 돌려주는 값
☑️ 객체 지향 프로그램의 특징(캡슐화, 상속, 다형성)
- 캡슐화 : 외부객체에서 사용하는 객체의 동작을 알지 못하는 상태
- 객체의 필드, 메소드를 묶고 실제 구현 내용을 외부에 감춤
- 외부의 잘못된 사용으로 객체가 손상되지 않게 하기 위함
- 노출 시킬 건지, 숨길 것인지는 접근제한자 사용.
- 상속 : 부모 객체가 가지고 있는 필드와 메소드를 자식 객체에게 물려주어 자식 객체가 사용할 수 있게함
- 코드의 재사용성을 높여줌 → 자식이 부모 객체의 필드 ,메소드를 사용할 수 있어 중복 코딩 방지
- 유지 보수 시간 최소화 → 부모 클래스에서 상속 받은 걸 수정하면 빠르게 수정된 필드 , 메소드 사용 가능
- 다형성 : 사용 방법은 동일하지만 실행 결과가 다양하게 나오는 성질
- OCP(Open-Close Principle)을 준수하는 상태
☑️ 객체와 클래스
- 객체를 생성하려면 설계도에 해당하는 Class가 필요
- 인스턴스(Instance) : 클래스로부터 생성된 객체
☑️ 필드는 객체의 데이터이므로 객체가 존재해야 사용 가능
☑️ 클래스 명명 규칙
- 첫 문자 대문자
- 캐멀 스타일
- 첫 글자 숫자 불가능 이후 글자부터 가능
- 특수문자 $, _ 포함 가능
- 객체 생성 연산자인 new를 통해 클래스로부터 객체 생성
클래스 변수 = new 클래스();
☑️ this
- 매개변수명이 필드명과 동일하기 때문에 필드임을 구분하기 위해 사용
- this는 현재 객체를 의미
- this.필드명 => 현재 객체의 필드
☑️ 생성자 오버로딩
- 매개값으로 객체의 필드를 다양하게 초기화하기 위해 사용
- 매개변수를 달리하는 생성자를 여러 개 선언하는 것
- 생성자를 호출할 때 제공되는 매개값의 타입과 수에 따라 실행될 생성자가 결정
☑️ 다른 생성자 호출 -> this()
- 생성자 오버로딩이 많아질 경우 생성자 간의 중복 코드가 발생
- 공통 코드를 한 생성자에만 집중적으로 작성, 나머지 생성자는 this를 사용해 공통 코드를 가지고 있는 생성자 호출
Car(String model) {
this(model, "은색", 250);
}
Car(String model, String color) {
this(model, color, 250);
};
Car(String model, String color, int maxSpeed) {
this.model = model;
this.color = color;
this.maxSpeed = maxSpeed;
}
☑️ 메소드
- 객체간의 상호작용하는 방법을 정의하는 것
- 메소드 선언 : 객체의 동작을 실행 블록으로 정의하는 것
- 메소드 호출 : 실행 블록을 실제로 실행하는 것
- 메소드 선언
리턴 타입 메소드명 (매개변수, ...) {
// 실행할 코드 작성하는 곳
}
- 리턴 타입
- 메소드가 실행한 후 호출한 곳으로 전달하는 결과값 타입
- void : 리턴값이 없는 메소드
- 리턴 타입이 있는 메소드는 실행 블록 안에서 return문으로 리턴값 반드시 지정
- 메소드명
- 소문자로 시작, 캐멀 스타일 작성
- 매개변수(parameter)
- 메소드를 호출할 때 전달한 매개값을 받기 위해 사용
- 매개값이 없다면 매개변수 생략
- 실행블록
- 메소드 호출 시 실행되는 부분
☑️ 메소드 오버로딩
- 메소드 이름은 같되 매개변수의 타입, 개수, 순서가 다른 메소드를 여러 개 선언하는 것
- 매개변수의 개수 또는 타입이 달라야함
- 반환타입과는 관계 없음 => 매개변수는 같은데 반환 타입만 다른 경우 오버로딩 성립 X
☑️ 복수 개의 클래스 선언이 포함된 소스 파일을 컴파일하면 바이트 코드 파일(.class)은 클래스 선언 수 만큼 생긴다.
- 소스 파일 명과 동일한 클래스만 public class)로 선언 가능
- 만약 다른 클래스도 public으로 선언하고 싶으면 .java 소스 파일을 별도로 생성해야 한다.
✏️ 따라서 소스 파일 하나당 클래스 하나를 선언하는 것이 좋다
☑️ 클래스 용도별 분류
- 라이브러리 클래스 : 실행할 수 없으며 다른 클래스에서 이용하는 클래스
- 실행 클래스 : main() 메소드를 가지고 있는 실행 가능한 클래스
☑️ 기본 생성자
클래스에 생성자 선언이 없으면 컴파일러는 기본 생성자를 바이트 코드 파일에 자동으로 추가 시킨다.
→그러나 개발자가 명시적으로 선언한 생성자가 있으면 컴파일러는 기본 생성자를 추가하지 않음
☑️ 가변 길이 매개변수(…)
메소드 매개변수에 가변 길이 매개변수를 넣으면 매개변수의 개수와 상관없이 매개 값을 줄 수 있음
가변 인자 외에도 매개변수가 더 있다면, 가변 인자를 매개변수 중에서 제일 마지막에 선언해야 함.
그렇지 않으면, 컴파일 에러가 발생한다. 가변 인자인지 아닌 지를 구별할 방법이 없기 때문
java: varargs parameter must be the last parameter
+가변인자는 내부적으로 배열을 생성해서 사용한다! → 난발 X
'이것이 자바다' 카테고리의 다른 글
이것이 자바다 CH 7-1(상속) (0) | 2023.01.13 |
---|---|
이것이 자바다 CH 6-2(클래스) (0) | 2023.01.13 |
이것이 자바다 CH 5(참조타입) (0) | 2023.01.13 |
이것이 자바다 CH 3(연산자), CH 4(조건문과 반복문) (0) | 2023.01.13 |
이것이 자바다 CH 1, 2(변수와 타입) (1) | 2023.01.13 |
Comments