06_클래스 #220713
6.1 객체 지향 프로그래밍
부품에 해당하는 객체들을 먼저 만들고, 이것들을 하나씩 조립해서 완성된 프로그램을 만드는 기법을 객체 지향 프로그래밍(oop)라고 한다.
6.1.1 객체란?
물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있고, 다른 것과 식별 가능한 것을 말함
EX)자동차, 자전거, 책, 사람, 학과, 강의, 주문 등
객체는 속성과 동작으로 구성
속성 - 필드
동작 - 메소드
현실세계의 객체를 소프트웨어 객체로 설계하는 것을 객체 모델링 이라고 한다
6.1.2 객체의 상호작용
객체의 메소드 호출
리턴값 = 객체.메소드(매개변수1, 매개변수2, ...);
객체의 메소드를 호출하면, 메소드의 기능이 실행되면서 리턴값이 호출된다.
EX)
int result = Calculator.add(10,20);
6.1.3 객체간의 관계
집합, 사용, 상속관계
집합관계 - 객체는 하나의 부품, 하나는 완성품
자동차-엔진, 타이어, 핸들 관계
사용관계 - 객체간의 상호작용
객체는 다른객체의 메소드를 호출하여 원하는 결과를 얻어냄
상속관계
상위부모-하위객체 생성관계
기계와 자동차의 관계
6.1.4객체지향프로그래밍의 특징
캡슐화
- 필드, 메소드를 하나로 묶고 실제 구현 내용을 감추는 것을 말한다. 외부 객체는 객체 내부의 구조를 알지 못하며 객체가 노출해서 제공하는 필드와 메소드만 이용할 수 있다.
이유는 외부의 잘못된 사용으로 인해 객체가 손상되지 않도록 하는데 있다.
EX)TV의 중요한 부품이 바깥으로 노출되어 있다면 사용자의 실수로 인해 고장날 수도 있다. TV안쪽으로 캡슐화하여 숨겨야 한다.
자바는 캡슐화된 멤버를 노출시킬 것인지 숨길것인지를 결정하기위해 접근 제한자를 사용한다.
접근 제한자는 객체의 필드와 메소드의 사용범위를 제한함으로서 외부로부터 보호한다.
상속
일반적으로 상속은 부모가 가지고 있는 재산을 자식에게 물려주는 것.
부모 역할의 상위 객체와 자식 역할의 하위 객체가 있다. 상위 객체는 자기가 가지고 있는 필드와 메소드를 하위 객체에게 물려주어 하위 객체가 사용할 수 있도록 해준다.
상속은 상위 객체를 재사용해 하위 객체를 쉽고 빨리 설계할 수 있도록 도와주고 이미 자 ㄹ개발된 객체를 재사용해서 새로운 객체를 만들기 때문에 반복된 코드의 중복을 줄여준다. 예를들어 필드1, 필드2, 메소드1, 메소드2를 가진 객체를 설계한다면 4개를 모두 처음부터 설계하는 것보다 이미 존재하는 객체가 있따면 이것을 상속하고 나머지만 설꼐하는것이 효율적이고 개발시간을 절약시켜준다.
상속은 상위 개체의 수정으로 모든 하위 객체들의 수정 효과를 가져오므로 유지 보수 시간을 최소화 ㅅ켜주기도 한다.
B,C객체가 A를 상속할경우 A의 필드와 메소드를 수정하면 B와C는 수정없이 객체 A의 수정사항을 사용할 수 있음
다형성
같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질을 말한다. 코드 측면에서 보면 다형성은 하나의 타입에 여러 객체를 대입함으로써 다양한 기능을 이용할 수 있또록 해준다.
자바는 다형성을위해 부모 클래스 또는 인터페이스의 타입 변환을 허용한다. 부모 타입에는 모든 자식 객체가 대입될 수 ㅣㅆ고, 인터페이스 타입에는 모든 구현 객체가 대입될 수 있다. 다형성의 효과로 객체는 부품화가 가능하다. 예를 들어 자동차를 설ㄹ계할 때 타이어 인터페이스 타입을 적용했다면 이 인터페이스를 구현한 실제 타이어들은 어떤 것이든 상관없이 장착(대입)이 가능하다.
6.2 객체와 클래스
객체는 설계도를 바탕으로 만들어짐
이를 클래스라고 함.
클래스에는 객체를 생성하기 위한 필드와 메소드가 정의되어 있다. 클래스로부터 만들어진 객체를 해당 클래스의 인스턴스라고 한다. 자동차객체는 자동차 클래스의 인스턴스인 셈이다.
하나의 클래스로부터 여러개의 인스턴스를 만들 수 있다. 이것은 동일한 설계도로부터 여러대의 자동차를 만드는 것
oop개발의 세 단계
1. 클래스 설계
2. 설계된 클래스로 사용할 객체 생성
3. 생성된 객체를 이용하는 것
6.3 클래스 선언
1. 하나이상의 문자로 이루어짐
2. 첫번째 글자는 숫자가 올 수 없음
3. '$', '_' 외에 문자는 사용불가
4. 자바 키워드는 사용불가.
관례적으로 첫문자를 대문자, 나머지는 소문자로 작성.
혼합된 이름을 사용한다면 각 단어의 첫머리 글자는 대문자로 작성.
소스파일 이름역시 대소문자가 같도록 함.
public class 클래스이름{
}
중괄호 시작은 클래스의 선언의 시작을 알려주고 중괄호 끝은 클래스 선언의 끝을 알려줌
6.4 객체 생성과 클래스 변수
new 클래스();
클래스 변수;
변수 = new 클래스();
클래스 변수 = new 클래스();
클래스는 두가지 용도가 있다.
1. 라이브러리용 : 다른 클래스에서 이용할 목적으로 설계
2. 실행용
프로그램에서 사용되는 클래스가 100개라면 99개는 라이브러리이고 단 하나가 실행 클래스이다.
실행클래스에서 메인메소드를 제공.