객체지향과 클래스
[ 단원 05 ]
단원 05 객체지향과 클래스
학습목표
❖
객체지향 프로그래밍에 대해 이해하고 설명할 수 있다.▪
• 객체지향과 절차적 프로그래밍 방식▪
• 클래스와 객체, • 추상화, 캡슐화, 상속, 다형성❖
클래스와 객체의 생성을 이해하고 프로그래밍에 활용할 수 있다.▪
• 클래스 생성 시 필드와 메소드의 구현▪
• 키워드 new를 사용한 객체의 생성▪
• 객체 변수에서 필드와 메소드 참조 방법▪
• 필드 참조 메소드인 getter와 setter 구현과 사용 방법❖
생성자 개념과 구현 방법을 이해하고 프로그래밍에 활용할 수 있다.▪
• 생성자의 필요성▪
• 생성자 구현 방법▪
• 생성자 오버로딩 개념과 구현 방법▪
• 다른 생성자 호출하기 위한 this()❖
키워드 static과 final의 사용 방법을 알고 활용할 수 있다.▪
• 클래스 소속을 위한 static▪
• 변수를 상수로 하기 위한 final2
단원 05 객체지향과 클래스 3
1. 객체지향 프로그래밍의 이해
단원 05 객체지향과 클래스
객체지향 개요
❖ 객체지형 프로그래밍 언어
▪
원조는 시뮬라(simula)라는 프로그래밍 언어•
클래스라는 개념을 처음으로 도입❖ 객체지향 프로그래밍
▪
클래스(class)를 생성하고•
클래스로부터 객체(object)를 만들어 객체 간의 상호작용을 이용하여 주어진 문제를 해 결하는 프로그래밍 방식▪
데이터인 필드와 절차인 메소드를 하나로 묶은 클래스 단위의 프로그램4
Section 1 객체지향 프로그래밍의 이해 p148
단원 05 객체지향과 클래스
필드와 메소드
❖ 객체(object)
▪
현실 세계의 사물이나 개념을 시스템에서 이용하기 위해 현실 세계를 자연스럽게 표현하여 손쉽게 이용할 수 있도록 만든 소프트웨어 모델❖ 객체 = 속성(attributes, properties) + 행동(messages, behaviors)
▪
속성•
객체의 특성을 표현하는 정적인 성질•
프로그래밍에서 속성은 필드(field)라 함▪
행동•
객체 내부의 일을 처리 하거나 객체들간의 서로 영향을 주고 받는 동적인 일을 처리하는 단위•
행동은메소드(method)라 함
5
Section 1 객체지향 프로그래밍의 이해
단원 05 객체지향과 클래스
객체와 클래스
❖ 클래스
▪
객체를 만들기 위한 모형이자 틀(template)▪
객체를 만들려면 반드시 객체의 다양한 특성을 표현할 수 있는 모형인 클래스가 필 요❖ 객체
▪
클래스의 구체적인 하나의 실례(instance)▪
객체와 클래스의 예6
Section 1 객체지향 프로그래밍의 이해
단원 05 객체지향과 클래스
추상화
❖
추상화(abstraction)▪
현실 세계의 사실에서 주어진 문제의 중요한 측면을 주목하여 설명하는 방식▪
실세계의 객체에서 불필요한 부분을 제거하여 필요한 부분만을 간결하고 이해하기 쉬운 클래스 로 만드는 작업▪
속성과 행동으로 추상화를 실현7
Section 1 객체지향 프로그래밍의 이해
단원 05 객체지향과 클래스
캡슐화
❖ 캡슐화(encapsulation)
▪
객체와 객체 간의 의사 소통을 위한 정보만을 노출•
실제 내부 구현 정보는 숨기는 원리▪
추상화 과정에서 클래스를 정의할 때•
객체의 자료와 행위를 클래스 단위로 하나로 묶고,•
실제 내부 구현 내용을 외부에 감추는 것❖ 정보 은닉(information hiding)이 발생
▪
캡슐화 과정에서 클래스 내부 구현을 외부에 숨김8
Section 1 객체지향 프로그래밍의 이해
단원 05 객체지향과 클래스
상속
❖ ‘ 물려받는다’라는 특징의 상속(inheritance)
▪
객체지향의 가장 핵심이 되는 개념▪
프로그램을 쉽게 확장할 수 있도록 해주는 강력한 수단▪
상위 클래스와 하위 클래스 간의 관계: 계층도▪
상속 장점•
공통의 특성을 하위 클래스마다 반복적으로 기술하지 않고 한 번만 기술하기 때문에 중복 을 줄여 재사용성의 효과9
Section 1 객체지향 프로그래밍의 이해
단원 05 객체지향과 클래스
다형성
❖ 다형성(polymorphism)
▪
원래 생물학적 용어로•
여러(poly) 형태(morphy)를 의미▪
외부에 보이는 모습은 한 가지 형태이지만•
실질적으로 쓰이는 기능은 여러 가지 역할을 수행한다는 의미▪
다형성의 예•
오버로딩(overloading)이나 오버라이딩(overriding)10
Section 1 객체지향 프로그래밍의 이해
단원 05 객체지향과 클래스 11
2. 클래스와 객체의 생성
단원 05 객체지향과 클래스
클래스의 필드 구현
❖ 필드 구현
▪
신용카드를 추상화한 클래스 CreditCard를 구현▪
신용카드의 속성•
카드번호 number, 소유자 owner 등을 고려❖ 다양한 필드 지정자(수정자)
12
Section 2 클래스와 객체의 생성 p154
단원 05 객체지향과 클래스
필드의 기본 값
❖ 기본 값
▪
선언 시 초기 값이 없으면•
자동으로 저장되는 값•
타입에 따라 기본이 되는 013
Section 2 클래스와 객체의 생성 p154
단원 05 객체지향과 클래스
객체 생성과 필드 참조 연산자
❖ 키워드 new
▪
객체를 생성하기 위해서는•
키워드 new 이후에 CreditCard()와 같이 생성자를 호출❖ 필드 참조 연산자 .
▪
참조형 변수인 myCard를 사용하여 필드 owner와 number를 참조•
myCard.owner, myCard.number14
Section 2 클래스와 객체의 생성
단원 05 객체지향과 클래스
실습예제
❖ 5-1
15
Section 2 클래스와 객체의 생성
단원 05 객체지향과 클래스
클래스의 메소드 구현
❖ 메소드 구현
▪
수정자 반환형 메소드이름(매개변수) { 구현 }•
메소드 use()– 신용카드를 사용하는 메소드
•
메소드 payBill()– 매월 또는 수시로 카드 비용을 지불하는 메소드
•
메소스 addPoint()– 카드 사용실적에 따른 포인트 합산하는 메소드
16
Section 2 클래스와 객체의 생성
단원 05 객체지향과 클래스
메소드 지정자
❖ 메소드 지정자 또는 수정자
▪
다양한 지정자를 위한 키워드17
Section 2 클래스와 객체의 생성
단원 05 객체지향과 클래스
실습예제 5-2
❖ 신용카드를 추상화하 여 여러 필드와 메소 드로 구성된 클래스
18
Section 2 클래스와 객체의 생성
단원 05 객체지향과 클래스
클래스로부터 객체 생성
19
Section 2 클래스와 객체의 생성
❖ 클래스
▪
객체를 만드는 모형❖ 객체
▪
클래스로부터 만들어짐.▪
new 이후에CreditCard()와 같이 클 래스의 생성자
(constructor)를 호출하 여 객체를 생성
단원 05 객체지향과 클래스
객체의 필드와 메소드 참조
❖ 참조 연산자 .
▪
참조 변수의 필드와 메소드를 사용20
Section 2 클래스와 객체의 생성
단원 05 객체지향과 클래스
필드 참조 메소드 getter와 setter 구현
❖ Setter 와 Getter
▪
필드의 값을 저장하는 메소드 setter▪
필드의 값을 반환하는 메소드 getter❖ 키워드 this
▪
객체 자신을 의미하는 키워드21
Section 2 클래스와 객체의 생성
단원 05 객체지향과 클래스
실습예제 5-4
❖ getter 와 setter를 구현한 클래스 CreditCard
22
Section 2 클래스와 객체의 생성
package obj.setter;
public class CreditCard {
public String owner; //카드 소유자 private long number; //16자리 카드번호 private int point; //카드 포인트
private int balance; //현재까지 사용액
//카드 사용 메소드
public void use(int amount) { balance += amount;
}
//카드 비용 지불 메소드
public void payBill(int amount) { balance -= amount;
addPoint(amount);
}
//카드 포인트 추가 메소드
private void addPoint(int amount) { point += amount/1000;
}
//setter & getter
public long getNumber() {
return number;
}
public void setNumber(long number) { //this.number = number;
if (number < 1000_0000_0000_0000L) {
System.err.println("잘못된 카드 번호입니다.");
return;
}
this.number = number;
}
public int getPoint() { return point;
}
public void setPoint(int point) { this.point = point;
}
public int getBalance() { return balance;
}
public void setBalance(int balance) { this.balance = balance;
} }
단원 05 객체지향과 클래스
실습예제 5-5
❖ 클래스
CreditCard 의 객체 생성과
getter 와 setter 사용
23
Section 2 클래스와 객체의 생성
단원 05 객체지향과 클래스
이클립스 팁
❖ getter 와 setter의 생성
24
단원 05 객체지향과 클래스 25
3. 생성자
단원 05 객체지향과 클래스
생성자 구현(1)
❖ 생성자 개요
▪
객체를 만드는 틀인 클래스에서 필요하면 생성자를 구현•
객체가 생성될 때 필요한 작업을 수행하는 특별한 메소드•
주로 객체 필드에 초기 값을 저장하거나 객체의 사용을 위해 필요한 초기화 작업이 수행❖ 생성자의 구성
▪
반환형을 기술하지 않으며 이름은 반드시 클래스 이름▪
생성자의 인자는 필요하면 기술▪
생성자는 주로 접근 지정자 public을 사용•
만일 필요하다면 생성자의 접근 지정자도 private 또는 protected도 가능26
Section 3 생성자 p164
단원 05 객체지향과 클래스
생성자 구현(2)
❖ 클래스 student의 생성자
27
Section 3 생성자
단원 05 객체지향과 클래스
객체 생성을 위한 생성자 호출
28
Section 3 생성자
단원 05 객체지향과 클래스
기본 생성자(1)
❖ 기본 생성자(default constructor)
▪
인자가 없는 생성자▪
클래스 Student에서 생성자가 하나도 구현되지 않았다면•
new Student()와 같이 인자가 없는 생성자를 호출하여 객체를 생성•
생성자를 전혀 구현하지 않은 클래스는 자동으로 기본 생성자를 제공29
Section 3 생성자
단원 05 객체지향과 클래스
기본 생성자(2)
❖ 클래스에서 인자가 있는 생성자가 적어도 하나 구현되었다면
▪
더 이상 기본 생성자는 자동으로 사용 불가능▪
기본 생성자를 사용하려면 기본 생성자도 직접 구현해야 함30
Section 3 생성자
단원 05 객체지향과 클래스
실습예제 5-7
❖ 학생을 위한 클래스의 생성자 구현 과 객체 생성
31
Section 3 생성자
단원 05 객체지향과 클래스
생성자 오버로딩
❖ 필요한 여러 생성자 구현
▪
생성자 오버로딩(constructor overloading)•
하나의 클래스에서 인자가 다르면 생성자를 여러 개 구현 가능32
Section 3 생성자
단원 05 객체지향과 클래스
실습예제 5-8
❖ 클래스 CreditCard의 여러 생 성자 활용
33
Section 3 생성자
단원 05 객체지향과 클래스
자기 자신의 다른 생성자 호출
❖ this(…)
▪
구현된 자기 자신의 다른 생성자를 호출하는 문장▪
생성자 구현에서 첫 줄에는•
this(인자)로 다른 생성자를 호출하여 사용 가능▪
두 번째 줄부터는 사용 불가34
Section 3 생성자
단원 05 객체지향과 클래스
실습예제 5-10
❖ 자동차를 표현한 클래스
35
Section 3 생성자
package obj.constructor;
public class Car {
private int maxSpeed; //최고 속도 public String brandName; //브랜드이름 public int speed; //현재 속도
//브랜드 이름을 지정하는 생성자
public Car(String brandName) { this.brandName = brandName;
}
//브랜드 이름과 최고 속도를 지정하는 생성자
public Car(String brandName, int maxSpeed) { this(brandName);
this.maxSpeed = maxSpeed;
}
//속도 관련 메소드
public int speedUp() { return speed += 30;
}
public int speedDown() { return speed -= 20;
}
//maxSpeed의 setter와 getter public int getMaxSpeed() {
return maxSpeed;
}
public void setMaxSpeed(int maxSpeed) { this.maxSpeed = maxSpeed;
}
public static void main(String[] args) { Car mycar = new Car("포르쉐", 300);
mycar.speedUp();
mycar.speedUp();
System.out.print("차종: " + mycar.brandName);
System.out.print(", 최고 속도: " + mycar.getMaxSpeed());
System.out.println(", 현재 속도: " + mycar.speedDown());
} }
단원 05 객체지향과 클래스 36
4. 정적인 속성을 위한 STATIC과 상
수를 위한 FINAL
단원 05 객체지향과 클래스
정적 필드와 메소드를 위한 키워드 static(1)
❖ 키워드 static
▪
필드나 메소드의 소속을 클래스로 제한하는 키워드▪
static을 사용한 정적 변수나 정적 메소드는 클래스 변수와 클래스 메소드▪
정적 필드 PI•
클래스에 소속된 저장공간이 하나만 존재하는 변수•
할당되는 객체에는 저장공간이 없음▪
비정적 필드 radius•
할당되는 객체마다 저장공간이 할당되는 객체 소속 변수❖ 정적 필드 참조 방법
▪
정적 필드는 Circle.PI와 같이 클래스이름.정적필드로 참조하는 방법이 원칙•
c1.PI나 c2.PI와 같이 객체 이름으로도 참조 가능37
Section 4 static과 final p174
단원 05 객체지향과 클래스
정적 필드와 메소드를 위한 키워드 static(2)
38
Section 4 static과 final
단원 05 객체지향과 클래스
실습예제 5-11
❖ 클래스 Circle에서 원주율 PI를 정적으로 선언하여 사용
39
Section 4 static과 final
단원 05 객체지향과 클래스
변수를 상수로 만드는 final
❖ 지역 변수의 상수
▪
키워드 final을 명시▪
저장된 값을 더 이상 수정할 수 없도록❖ 소속 변수인 필드를 상수로 선언하기 위해
▪
키워드 final을 명시▪
static도 함께 사용하여 정적으로 하는 것을 권유40
Section 4 static과 final
단원 05 객체지향과 클래스
실습예제 5-13
❖ 클래스 Circle에서 면적과 원의 둘레 길이 구하기
41
Section 4 static과 final
42