Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
객체지향 프로그래밍(1)1 객체지향의 기본 개념
객체지향 프로그래밍(1)1. 객체지향의 기본 개념
2. 클래스 선언 및 사용
3. 생성자, 클래스 접근 제어자
4 필드 및 메소드 접근 제어자4. 필드 및 메소드 접근 제어자
5. this와 super
1
객체객체
객체란
▶보거나 만질 수 있는 사물 공간을 차지▶보거나 만질 수 있는 사물, 공간을 차지
하고 있는 물질적인 사물
프로그래밍 분야에서의 객체밍
▶실세계의 문제 영역에 존재하는 대상물
을 소프트웨어로 모델화한 것을 소프트웨어로 모델화한 것
▶추상적 개념까지 포함함▶추상적 개념까지 함함
2
객체의 예객체의 예
객체객체 car1car1
메소드데이터
객체객체 car1car1
메소드데이터
속력 : 65km/h 가속 / 감속승차인원 : 3명연료량 : 32리터
승차 / 하차연료주입
기어위치 : 4단 현재 인원은?
3
객체와 클래스객체와 클래스
클래스▶공통적 특징을 갖는 객체들을 추▶공통적 특징을 갖는 객체들을 추
상화한 개념
▶클래스는 참조형
객체가 가지는 데이터와 메소드를객체가 가지는 데이터와 메소드를정의
4
객체와 클래스객체와 클래스
▶클래스를 통한 객체의 생▶클래스를 통한 객체의 생성을 instantiation이라함
클래스는 객체 생성을 위클래 는 객체 생성을 위한 템플릿
객체는 클래스의 인스탄스객체는 클래스의 인스탄스
▶자바의 인터페이스▶자바의 인터페이스
추상 메소드와 상수로 구성된 추상 클래스성된 추상 클래스
5
상속상속
클래스간의 관계
▶기존 클래스의 특성과 함께 고유▶기존 클래스의 특성과 함께 고유한 특성을 가지고 있는 클래스 정의의
포유류
고래 사람
6
상속상속
▶수퍼 클래스
서로 다른 클래스들의 공통적 특성과서로 다른 클래스들의 공통적 특성과기능을 추상화한 것
▶수퍼 클래스와 서브 클래스
부모/자식 클래스 베이스/유도 클래부모/자식 클래스, 베이스/유도 클래스
7
다형성다형성
▶같지만 다른것, 다르지만 같은 것
은 하: 같은 수퍼 클래스를 상속하는 서로 다른 클래스들의 개별 기능은거시적으로는 같지만 미시적으로는 서로 달라 질 수 있음는 서로 달라 질 수 있음
▶예
이질적 객체 리스트
메소드 오버라이딩, 메소드 오버로딩딩, 딩
8
다형성다형성
형
drawdrawdrawdraw
도형 도형 p;
p=new 타원();drawdrawdrawdraw
p.draw();
dd
사각형
dd
타원
dd
삼각형
drawdrawdrawdraw drawdraw
9
클래스 선언클래스 선언
기본 문법< 어 > < 이 ><접근제어자> class <클래스 이름> {
<필드 선언>;
<메소드 선언>;
}
▶접근제어자
public, abstract, final, 생략public, abstract, final, 생략
10
클래스 선언클래스 선언
public class Electronics {
private int nVoltage = 0; //필드
public void turnOn(int nInputVoltage) { //메소드
V lt I tV ltnVoltage = nInputVoltage;
}
public void turnOff() { nVoltage = 0; }public void turnOff() { nVoltage = 0; }
public int getVoltage() { return nVoltage; }
}}}
11
클래스의 상속클래스의 상속
▶수퍼 클래스의 필드와 메소드를 상속
오▶서브 클래스에서 메소드 오버라이딩가능
접근 제어자, 반환형, 이름, 매개 변수가일치해야 함일치해야 함
▶클래스의 상속은 단일 상속만 가능
인터페이스는 다중 상속 가능
12
클래스의 상속클래스의 상속
public class TV extends Electronics {
private int nSize = 0;p
public void setSize(int new_size) {
nSize = new_size; _
}
public int getSize() { return nSize; }public int getSize() { return nSize; }
}
13
클래스의 사용클래스의 사용
▶구체적이고 실체가 있는 객체의생성생성
클래스는 객체들을 일반화한 추상적개념개념
클래스 유형 변수를 선언한 후 객체를 생성하여야 함를 생성하여야 함
▶객체의 생성이란?▶객체의 생성이란?
메모리에 객체를 위한 공간을 할당받고 초기값을 저장하는 것고 초기값을 저장하는 것
14
변수 선언과 객체의 생성변수 선언과 객체의 생성
클래스형 변수의 선언
Electronics b;
bb객체객체
객체의 생성bb
생성▶new <클래스 이름>();
b = new Electronics();
15
16
17
18
생성자생성자
▶객체가 생성될 때 실행되는 메소드▶객체가 생성될 때 실행되는 메소드
▶이름이 클래스 이름과 같은 메소드
반환형이 없음
▶필드 값 초기화, 메모리 할당 등의 작업,
▶여러 생성자 가능매개 변수로 구분함매개 변수로 구분함
기본 생성자란?기본 생성자란?▶인자 없는 생성자
▶아무 생성자도 없을 때는 자동으로 만들어짐19
클래스 선언과 생성자클래스 선언과 생성자class Circle { c ass C c e {
int r;public Circle( ) { //기본 생성자
r = 0 ;}}public Circle(int a) {
r = a; }
r}public double getArea() {
return r * r * 3.14; }}
}
public class CircleArea2 { public static void main(String args[]) {public static void main(String args[]) {
Circle c = new Circle(5);System.out.println(c.getArea());
} }
20
클래스 선언과 사용class Cylinder {
클래스 선언과 사용
Circle c; //원int h; //높이public Cylinder(Circle a, int b) { //생성자
c = a;h = b;
}bli d bl tV l () { //부피 구하기 hpublic double getVolume() { //부피 구하기
return c.getArea() * h;}
}
r
h
}public class CylinderVolume {
public static void main(String args[]) {Circle c = new Circle(7); //원 생성Circle c = new Circle(7); //원 생성Cylinder cy = new Cylinder(c, 8); //원기둥 생성System.out.println(cy.getVolume());
}}}
21
22
23
24
클래스의 접근 제어자클래스의 접근 제어자
▶해당 클래스를 사용할 수 있는 외부 범위를 지정위를 지정
? class Circle { … }
▶public
{ }
어디서나 상속과 참조가 가능
▶생략되는 경우▶생략되는 경우
같은 패키지 안에서만 상속과 참조가 가능
25
클래스의 접근 제어자클래스의 접근 제어자
▶abstract
몸체가 없는 메소드가 존재하는 경우몸체가 없는 메소드가 존재하는 경우
객체를 생성시킬 수 없으며 상속만 가능
▶final
상속이 불가능상속이 불가능
abstract와 같이 사용할 수 없음
26
필드 선언필드 선언
▶객체의 상태를 저장하는 변수▶객체의 상태를 저장하는 변수
필드 접근 제어자필드 접근 제어자▶필드를 사용할 수 있는 외부 범위를▶필드를 사용할 수 있는 외부 범위를
지정 class Circle { ? int r;? int r;
…}
▶private
선언된 클래스 내부에서만 사용 가능선언된 클래스 내부에서만 사용 가능27
필드 선언필드 선언
필드 접근 제어자필드 접근 제어자▶생략▶생략
같은 패키지에서 사용 가능
package 접근 수준이라 함package 접근 수준이라 함
▶protected
같은 패키지와 서브 클래스에서 사용가능가능
▶public
어디서나 참조 가능어디서나 참조 가능28
필드 선언필드 선언
필드 접근 제어자▶static
클래스 내의 모든 객체들이 공유하는 변수클래스 내의 모든 객체들이 공유하는 변수
객체 생성 없이 접근 가능
정적 변수 클래스 변수라고 함정적 변수, 클래스 변수라고 함
▶final
초기화 후에는 값을 바꿀 수 없음
29
메소드 선언메소드 선언
메소드 접근 제어자▶public, protected, 생략, private
▶static 메소드▶static 메소드
클래스 메소드, 객체 없이 호출 가능
인스탄스 메소드를 호출하거나 인스탄스
Integer.parseInt(i);
인스탄스 메소드를 호출하거나 인스탄스필드를 참조할 수 없다
필 를 제어하는 기능static 필드를 제어하는 기능30
메소드 선언메소드 선언
메소드 접근 제어자▶final
상속은 가능하나 재정의 할 수 없음상속은 가능하나 재정의 할 수 없음
▶abstract
몸체가 없고 signature만 존재
▶synchronized▶synchronized
다중 스레드 프로그램에서 동기화가필요한 메소드임을 표시하는 것필요한 메소드임을 표시하는 것
31
32
33
this와 superthis와 super
thithis▶인스탄스 메소드에서 사용▶인 탄 메 에서 사용
▶메소드가 속하는 객체의 참조값을 가짐
super▶ 찬 현 참 을▶마찬가지로 현재 객체의 참조값을 가
지나 자료형이 직계상위 클래스 유형임
상위 클래스에서 정의된 같은 이름의필드를 참조할 때필 를 참 할 때
34
class SuperClass {public double x;public double x;
}class SubClass extends SuperClass {
double x;double x;public SubClass(double new_x) {
this.x = new_x;super x = new x * 10;super.x = new_x * 10;
}public double getSuper() { return super.x; }public double getSub() {return this.x; }public double getSub() {return this.x; }
}public class Test {
public static void main(String args[]) {pub c s a c o d a (S g a gs[]) {SubClass subclass = new SubClass(10);System.out.println(subclass.x);System.out.println(subclass.getSuper());System.out.println(subclass.getSub());
}}
35
this( )와 super( )this( )와 super( )
▶ 출▶생성자 몸체의 맨 앞에서 호출
super()▶상위 클래스의 생성자를 명시적으로 호출
▶명시적 호출이 없다면 자동으로 상위클래스의기본 생성자 호출기본 생성자 호출
this()▶다른 생성자를 호출▶다른 생성자를 호출
참고▶super.method()
하위 클래스에서 재정의 당한 상위 클래스 메소드를 호출소드를 호출
36
상속과 생성자
class SuperClass {
상속과 생성자
class SuperClass {private double x;public SuperClass(double new_x) {
this x = new x * 10;this.x new_x * 10;}public double getX() { return x; }
}}class SubClass extends SuperClass {
double x;public SubClass(double new_x) {p ( _ ) {
super(new_x); //SuperClass 생성자 호출x = new_x;
}
super();
public double getSuper() { return super.getX();}public double getX() { return this.x; }
}
37
38
39