Download presentation
Presentation is loading. Please wait.
Published byIndra Sasmita Modified 5년 전
2
Chapter 11 객체지향 프로그래밍의 기초 01 클래스 02 생성자 03 인스턴스 변수와 클래스 변수 예제 모음 요약
연습문제
3
JAVA 언어의 가장 큰 특징인 객체지향 프로그래밍에 대해 살펴보자.
4
Section 01 클래스(1) 클래스의 개념 클래스의 형태 JAVA는 완전한 객체지향 프로그래밍 언어, 가장 핵심적인 개념
TIP : public은 접근 제어 수식어(access control modifier) 또는 접근 제한자라 함
5
저자 한마디 객체지향 프로그래밍의 특징 객체지향 프로그래밍을 지원하는 언어는 대표적으로 JAVA, C#, C++ 등이다. 객체지향 프로그래밍의 특징은 다음과 같이 몇 가지로 요약되는데, 어렵게 느껴진다면 일단 읽어보고 넘어가자. 추상화란 불필요한 정보의 노출을 최소화하고 꼭 필요한 정보만 노출하는 기법으로 캡슐화, 은닉화 등의 용어와 관련이 있다. 자료의 추상화를 위해 구현한 것이 클래스이다. 상속이란 기존에 만들어놓은 클래스의 기능을 그대로 물려받아서 사용하는 것을 말한다. 이렇게 하면 기존의 코드가 재사용되기 때문에 상당히 효율적인 프로그래밍이 가능하다. 다형성이란 같은 이름의 기능을 하는 요소를 여러 개 만드는 것을 말한다. 예를 들어 A라는 이름의 메소드 여러 개가 각각 다른 기능을 하도록 만들 수 있다. 동적 바인딩이란 실행할 시점에 동작이 변경될 수 있는 것을 의미하며, 컴파일할 때 동작이 결정되는 정적 바인딩과 반대되는 개념이다.
6
Section 01 클래스(2) 클래스 생성하기 자동차 클래스
7
Section 01 클래스(3) 자동차 클래스 코드 구현
8
Section 01 클래스(4) 인스턴스 생성하기 자동차 제작 - ‘객체’ 또는 ‘인스턴스’
9
Section 01 클래스(5) 실제 클래스와 인스턴스의 형식
10
Section 01 클래스(6) 자동차 3대의 인스턴스 생성 실제 코드
11
Section 01 클래스(7) 인스턴스 필드에 값 대입하기 [그림 11-3]을 코드 표현
12
Section 01 클래스(8) 메소드 호출하기 메소드의 호출은 ‘인스턴스이름.메소드이름( )’ 형식
TIP : 실제 메소드는 각 인스턴스별로 존재하지 않고 모든 인스턴스가 공유하는 개념이다. 즉 메소드는 인스턴스의 상태를 저장한 것이 아니라 동작을 표현한 것이기 때문에 공유해도 문제가 없다. 하지만 인스턴스마다 각각의 메소드를 가지고 있다고 생각해도 괜찮다.
13
Section 01 클래스(9) 클래스의 실제 코딩
14
Section 01 클래스(10)
15
Section 01 클래스(11)
16
Section 01 클래스(12) 클래스 사용 순서
17
저자 한마디 class 파일 [실습 11-1]은 소스 파일은 Ex11_01.java 1개이지만 그 안에 Car 클래스와 Ex11_01 클래스 2개가 있다. 그래서 이 파일을 실행하면 2개의 바이트코드 파일, 즉 Car.class와 Ex11_01.class가 생성된다. class 개수만큼 파일이 생성되는 것인데, 단 클래스 안에 클래스를 작성하는 내부 클래스는 외부 클래스 1개만 *.class로 생성된다. 내부 클래스는 12장에서 다시 살펴볼 것이다.
18
Section 01 클래스(13) 필드와 메소드에 대한 접근 제한
19
Section 01 클래스(14)
20
Section 01 클래스(15) 13행 : getColor( ) 메소드는 현재 인스턴스에 설정된 색상을 반환
17행 : getSpeed( ) 메소드는 현재 인스턴스에 설정된 속도를 반환 29행 : 직접 color와 speed 필드에 접근 30행 : getColor( )와 getSpeed( ) 메소드를 호출함으로써 간접적으로 color와 speed 필드 에 접근, 30행의 간접적인 접근 방식을 사용하는 것이 바람직함
21
Section 01 클래스(16) private 접근 제어 수식어
JAVA에서는 필드에 직접 접근하지 못하도록 private 접근 제어 수식어를 제공. 필드 앞에 private를 붙이면 클래스 안의 메소드에서는 접근이 가능하지만, 인스턴스를 통해 직접 필드에 접근할 수는 없음
22
Section 01 클래스(17)
23
Section 01 클래스(18)
24
Section 01 클래스(19) 8행, 12행 setColor( ) 메소드 안에는 color라는 변수가 2개. 파라미터 변수 color와 Car 클래스의 필드 color인데, 이 둘은 이름이 같기 때문에 구분하기 위해 Car 클래스의 필드에는 자신의 클래스를 의미하는 this를 붙임. 아무것도 붙이지 않고 color라고 하면 파라미터 변수를 가리킴
25
Section 01 클래스(20) public 접근 제어 수식어
public 접근 제어 수식어는 private과 반대로 외부(모든 클래스)에서 접근이 가능하도록 하는 예약어. 일반적으로 private은 필드 앞에 붙여서 사용, public은 메소드 앞에 붙여서 사용. 따라서 필드는 외부에서 함부로 변경할 수 없도록 하고, 외부에 공개된 메소드를 통해 접근하도록 함.
26
저자 한마디 default와 protected 접근 제어 수식어
자주 사용하지는 않지만 default와 protected 접근 제어 수식어도 있다. 둘 다 같은 패키지 안에서는 접근이 가능하지만, default의 경우 하위 클래스는 접근하지 못하고 protected는 서브 클래스에서 접근이 가능하다. 특별히 필드나 메소드에 아무것도 붙이지 않으면 default가 기본으로 설정된다. 즉 같은 패키지 안에서는 접근이 가능하다. (서브 클래스는 12장에서, 패키지는 14장에서 살펴볼 것이다.) public, private, default, protected, 4개의 접근 제어 수식어(또는 접근 제한자)를 통해 객체 지향 프로그래밍의 특징인 캡슐화와 정보 은닉 등이 구현된다. 참고로 접근 제어 수식어는 public>protected>default>private의 순서로 공개적이다. 지금까지의 내용을 표로 요약 하면 다음과 같다.
27
Section 01 클래스(21)
28
Section 01 클래스(22) private, public 접근 제어 수식어의 활용
29
Section 01 클래스(23)
30
Section 01 클래스(24)
31
Section 02 생성자(1) 생성자 클래스의 이름과 동일한 메소드를 말함, 주로 초기화할 때 사용
[실습 11-1]의 16~18행 16행에서 myCar1 인스턴스를 생성한 후, 17행에서 색상을 빨강으로 초기화하고, 18행에 서는속도를 0으로 초기화. 16행에서 인스턴스를 생성하면서 동시에 빨강과 0으로 초기화 할 경우 코드가 간결해지 고, 인스턴스를 생성하면서 값을 초기화하기 때문에 필드에 초깃값을 대입하는 것을 잊어 버리는 일도 없을 것임
32
Section 02 생성자(2) 생성자의 기본 생성자는 클래스와 이름이 동일 [실습 11-1]의 16~18행
33
Section 02 생성자(3) 기본 생성자
34
Section 02 생성자(4)
35
Section 02 생성자(5) 파라미터가 있는 생성자
36
Section 02 생성자(6)
37
Section 02 생성자(7) 메소드 오버로딩(overloading)
같은 클래스 내에서 메소드의 이름이 같아도 파라미터의 개수나 데이터 형식만 다르면 여러 개를 선언할 수 있음. 생성자도 메소드의 일종이므로 메소드 오버로딩이 가능 Car 클래스에 다음과 같이 여러 개의 생성자를 만들 수 있음
38
Section 02 생성자(8)
39
Section 02 생성자(9)
40
Section 02 생성자(10)
41
Section 03 인스턴스 변수와 클래스 변수(1)
인스턴스 변수는 인스턴스를 생성해야 공간이 할당되고, 클래스 변수는 클래스 자체에 변수의 공간이 할당되어 있음 인스턴스 변수 앞에서 살펴본 Car 클래스의 color나 speed 필드는 인스턴스 변수. 인스턴스 변수는 인스턴스를 생성해야 사용할 수 있음 설계도(클래스)를 이용하여 main( ) 메소드에서 자동차(인스턴스) 만들기
42
Section 03 인스턴스 변수와 클래스 변수(2)
인스턴스 변수의 개념
43
Section 03 인스턴스 변수와 클래스 변수(3)
클래스 안에 공간이 할당된 변수
44
Section 03 인스턴스 변수와 클래스 변수(4)
45
Section 03 인스턴스 변수와 클래스 변수(5)
4행 : 클래스 변수 count를 선언하면 이 변수는 클래스 자체에 공간이 할당 13, 16, 19행 : 인스턴스를 생성해도 count는 인스턴스에 속하지 않고 클래스에 남아 있음 인스턴스를 생성할 때 6~8행의 생성자가 호출되며, 생성자에는 count(생산 된 자동차의 총대수)를 1씩 증가시킴 20행 : ‘클래스이름.count’. 즉 클래스 변수 count에 접근하기 위해 ‘인스턴스이름.count’ 또 는 ‘클래스이름.count’ 모두 사용할 수 있음
46
Section 03 인스턴스 변수와 클래스 변수(6)
인스턴스 메소드와 클래스 메소드 인스턴스 메소드는 인스턴스를 먼저 생성한 다음 ‘인스턴스이름.메소드이름( )’ 방식으로 호출하는 것을 말함 클래스 메소드는 메소드 이름 앞에 ‘static’ 키워드를 붙임
47
Section 03 인스턴스 변수와 클래스 변수(7)
4행 : count에 직접 접근하지 못하도록 private을 붙임. 이제 count는 6행의 생성자와 10행의 getCount( ) 메소드에서만 접근이 가능 10행 : static 키워드를 붙여서 getCount( ) 메소드를 클래스 메소드로 지정. 즉 인스턴스가 생성되기 전에도 18행에서 getCount( ) 메소드를 ‘클래스이름.메소드이름( )’ 형식으로 호출 가능
Similar presentations