✔ OOP
Object Oriented Programming
객체들을 먼저 만들고, 이 객체들을 하나씩 조립해서 완성된 프로그램을 만드는 기법
✔ 객체
물리적으로 존재하거나 개념적인 것 중에서 다른 것과 식별 가능한 것
예) 자동차, 책, 강의, 주문 ...
객체 = 속성(필드) + 동작(메소드)
✔ 객체의 상호작용
객체들은 메소드를 이용해서 다른 객체와 서로 상호작용하면서 동작
메소드 호출을 통해 객체들은 데이터를 서로 주고받음
매개값
: 메소드가 실행할 때 필요한 값
리턴값
: 메소드의 실행의 결과, 호출한 곳으로 돌려주는 값
✔ 객체 간의 관계
집합 관계
: 완성품과 부품의 관계 / 예) 자동차 - 엔진, 타이어...
사용 관계
: 다른 객체의 필드를 읽고 변경하거나 메소드를 호출하는 관계 / 예) 사람 - 자동차
상속 관계
: 부모와 자식 관계 / 예) 기계(부모) - 자동차(자식)
✔ 객체 지향 프로그래밍의 특징
✔ 캡슐화 (Encapsulation)
객체의 데이터(필드), 동작(메소드)을 하나로 묶고 실제 구현 내용을 외부에 감추는 것
외부 객체는 객체 내부의 구조를 알지 못하고, 객체가 노출해서 제공하는 필드와 메소드만 이용 가능
캡슐화의 목적 : 외부의 잘못된 사용으로 인해 객체가 손상되지 않도록 하기 위해
접근 제한자(Access Modifier)
사용으로 캡슐화 구현
✔ 상속 (Inheritance)
✔ 다형성 (Polymorphism)
자동 타입 변환
과 재정
을 통해 구현✔ 객체와 클래스
클래스(Class)
가 필요인스턴스(instance)
: 클래스로부터 생성된 객체✔ 클래스 선언
생성자
(객체를 생성하는 것), 필드
(객체가 가질 데이터), 메소드
(객체의 동작)로 구성✔ 클래스 명명 규칙
✔ 공개 클래스 (public class) : 어느 위치에 있든지 패키지와 상관없이 사용할 수 있는 클래스
✔ 객체 생성과 클래스 변수
new
를 통해 클래스로부터 객체 생성클래스 변수 = new 클래스();
✔ 클래스의 두가지 용도
✔ 클래스의 구성 멤버
✔ 필드
✔ 필드 선언
타입 필드명 [ = 초기값];
✔ 필드 사용
도트(.)
이용✔ 생성자
클래스 변수 = new 클래스();
클래스()
부분이 생성자를 호출하는 것✔ 기본 생성자 (Default Constructor)
✔ 생성자 선언
클래스(매개변수, ...) {
//객체의 초기화 코드
}
✔ 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;
}
✔ 메소드
✔ 메소드 선언
리턴 타입 메소드명 (매개변수, ...) {
// 실행할 코드 작성하는 곳
}
리턴 타입
메소드명
매개변수(parameter)
실행 블록
✔ 메소드 호출
참조 변수
, 도트(.) 연산자
를 이용해 호출✔ 가변길이 매개변수
// 가변길이 매개변수 선언방법
int sum(int ... values) {
// 실행블록
}
int result = sum(1, 2, 3);
int result = sum(1, 2, 3, 4);
// 다양한 가변길이 매개변수 사용방법
// 1.
int result = sum(1, 2, 3);
// 2.
int[] values = {1, 2, 3};
int result = sum(values);
// 3.
int result = sum(new int[] {1, 2, 3});
✔ return문
return [리턴값];
으로 리턴값 지정Unreachable code
컴파일 에러 발생✔ 메소드 오버로딩