Chapter 11 객체지향 프로그래밍의 기초 01 클래스 02 생성자 03 인스턴스 변수와 클래스 변수 예제 모음 요약

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

5. 접근 제한자의 이해 SCJP 자격증 프로젝트 발표자 : 노효진.
01_ 가상 함수를 사용한 다형성의 구현 02_ 오버라이딩
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
Chap07 상속 Section 1 : 상속의 개요 Section 2 : 멤버 변수의 상속
최윤정 Java 프로그래밍 클래스 상속 최윤정
5장. 객체지향과 클래스.
JAVA 클래스와 멤버 2014년 4월 2일 19:00 손은경 강원대학교 데이터베이스 연구실 강원대학교 데이터베이스 연구실.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스
1장. 이것이 C 언어다.. 1장. 이것이 C 언어다. 프로그래밍 언어 1-1 C 언어의 개론적 이야기 한글, 엑셀, 게임 등의 프로그램을 만들 때 사용하는 언어 ‘컴퓨터 프로그래머’라는 사람들이 제작 C 언어(C++ 포함)를 가장 많이 사용함.
컴퓨터 프로그래밍 기초 [Final] 기말고사
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
6장. 클래스.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
자바 5.0 프로그래밍.
두근두근 파이썬 수업 13장 객체란 무엇인가요?.
제7장 클래스와 객체.
패키지와 접근 제어 패키지에 대하여 접근 제어에 대하여.
Power Java 제14장 배치 관리자.
Java 6장. 클래스 : 속성 public class SumTest {
Lesson 7. 클래스와 메소드 - 1.
자바 5.0 프로그래밍.
C#.
[INA470] Java Programming Youn-Hee Han
13. 연산자 오버로딩.
7장 인터페이스와 추상 클래스.
Method & library.
박성진 컴퓨터 프로그래밍 기초 [09] 배열 part 1 박성진
27장. 모듈화 프로그래밍.
29강 JAVA 스레드 - 스레드란? - 멀티스레드 문법 - synchronized Lecturer Kim Myoung-Ho
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
Effective Java [Issue 1 and 2]
6강. 객체지향 프로그램의 시작 객체지향 이전의 프로그래밍 객체지향의 등장 배경과 이해 메소드의 이해
20장. 객체지향 프로그래밍 01_ 객체지향 프로그래밍의 시작.
제 4장. 객체 지향 프로그래밍 시작하기 학기 프로그래밍언어및실습 (C++).
자바 5.0 프로그래밍.
자바 가상 머신 프로그래밍 Chap 10. 자바 컴파일링의 안쪽 ② Pslab 오민경.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
Power Java 제11장 상속.
9강. 클래스 실전 학사 관리 프로그램 만들기 프로그래밍이란 결국 데이터를 효율적으로 관리하기 위한 공구
Chapter 09 문자열과 메소드 01 문자열 02 메소드 03 지역변수와 전역변수 04 메소드의 반환 값과 매개변수
JA A V W. 06.
10장 상속 Section 1 상속의 개요 Section 2 상속과 한정자 Section 3 상속과 생성자
CHAP 21. 전화, SMS, 주소록.
객체기반 SW설계 팀활동지 4.
18강. 인터페이스 – II - 인터페이스와 다중상속 - 인터페이스를 통한 로봇 장남감 만들기 프로그래밍
( Windows Service Application Debugging )
C# 07장. 객체 지향 개념.
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
중복 멤버의 처리 조 병 규 한 국 교 통 대 학 교 SQ Lab..
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
Lecture 04 객체지향 페러다임 Kwang-Man Ko
3. 모듈 (5장. 모듈).
함수, 모듈.
발표자 : 이지연 Programming Systems Lab.
Android -Data Base 윤수진 GyeongSang Univ. IT 1.
Numerical Analysis Programming using NRs
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 05. 복사 생성자.
Power Java 제14장 배치 관리자.
Java의 정석 제 8 장 예외처리 (Exception handling) Java 정석 남궁성 강의
자바 객체 지향 프로그래밍 Ps lab 김윤경.
7 생성자 함수.
6 객체.
Presentation transcript:

Chapter 11 객체지향 프로그래밍의 기초 01 클래스 02 생성자 03 인스턴스 변수와 클래스 변수 예제 모음 요약 연습문제

JAVA 언어의 가장 큰 특징인 객체지향 프로그래밍에 대해 살펴보자.

Section 01 클래스(1) 클래스의 개념 클래스의 형태 JAVA는 완전한 객체지향 프로그래밍 언어, 가장 핵심적인 개념 TIP : public은 접근 제어 수식어(access control modifier) 또는 접근 제한자라 함

저자 한마디 객체지향 프로그래밍의 특징 객체지향 프로그래밍을 지원하는 언어는 대표적으로 JAVA, C#, C++ 등이다. 객체지향 프로그래밍의 특징은 다음과 같이 몇 가지로 요약되는데, 어렵게 느껴진다면 일단 읽어보고 넘어가자. 추상화란 불필요한 정보의 노출을 최소화하고 꼭 필요한 정보만 노출하는 기법으로 캡슐화, 은닉화 등의 용어와 관련이 있다. 자료의 추상화를 위해 구현한 것이 클래스이다. 상속이란 기존에 만들어놓은 클래스의 기능을 그대로 물려받아서 사용하는 것을 말한다. 이렇게 하면 기존의 코드가 재사용되기 때문에 상당히 효율적인 프로그래밍이 가능하다. 다형성이란 같은 이름의 기능을 하는 요소를 여러 개 만드는 것을 말한다. 예를 들어 A라는 이름의 메소드 여러 개가 각각 다른 기능을 하도록 만들 수 있다. 동적 바인딩이란 실행할 시점에 동작이 변경될 수 있는 것을 의미하며, 컴파일할 때 동작이 결정되는 정적 바인딩과 반대되는 개념이다.

Section 01 클래스(2) 클래스 생성하기 자동차 클래스

Section 01 클래스(3) 자동차 클래스 코드 구현

Section 01 클래스(4) 인스턴스 생성하기 자동차 제작 - ‘객체’ 또는 ‘인스턴스’

Section 01 클래스(5) 실제 클래스와 인스턴스의 형식

Section 01 클래스(6) 자동차 3대의 인스턴스 생성 실제 코드

Section 01 클래스(7) 인스턴스 필드에 값 대입하기 [그림 11-3]을 코드 표현

Section 01 클래스(8) 메소드 호출하기 메소드의 호출은 ‘인스턴스이름.메소드이름( )’ 형식 TIP : 실제 메소드는 각 인스턴스별로 존재하지 않고 모든 인스턴스가 공유하는 개념이다. 즉 메소드는 인스턴스의 상태를 저장한 것이 아니라 동작을 표현한 것이기 때문에 공유해도 문제가 없다. 하지만 인스턴스마다 각각의 메소드를 가지고 있다고 생각해도 괜찮다.

Section 01 클래스(9) 클래스의 실제 코딩

Section 01 클래스(10)

Section 01 클래스(11)

Section 01 클래스(12) 클래스 사용 순서

저자 한마디 class 파일 [실습 11-1]은 소스 파일은 Ex11_01.java 1개이지만 그 안에 Car 클래스와 Ex11_01 클래스 2개가 있다. 그래서 이 파일을 실행하면 2개의 바이트코드 파일, 즉 Car.class와 Ex11_01.class가 생성된다. class 개수만큼 파일이 생성되는 것인데, 단 클래스 안에 클래스를 작성하는 내부 클래스는 외부 클래스 1개만 *.class로 생성된다. 내부 클래스는 12장에서 다시 살펴볼 것이다.

Section 01 클래스(13) 필드와 메소드에 대한 접근 제한

Section 01 클래스(14)

Section 01 클래스(15) 13행 : getColor( ) 메소드는 현재 인스턴스에 설정된 색상을 반환 17행 : getSpeed( ) 메소드는 현재 인스턴스에 설정된 속도를 반환 29행 : 직접 color와 speed 필드에 접근 30행 : getColor( )와 getSpeed( ) 메소드를 호출함으로써 간접적으로 color와 speed 필드 에 접근, 30행의 간접적인 접근 방식을 사용하는 것이 바람직함

Section 01 클래스(16) private 접근 제어 수식어 JAVA에서는 필드에 직접 접근하지 못하도록 private 접근 제어 수식어를 제공. 필드 앞에 private를 붙이면 클래스 안의 메소드에서는 접근이 가능하지만, 인스턴스를 통해 직접 필드에 접근할 수는 없음

Section 01 클래스(17)

Section 01 클래스(18)

Section 01 클래스(19) 8행, 12행 setColor( ) 메소드 안에는 color라는 변수가 2개. 파라미터 변수 color와 Car 클래스의 필드 color인데, 이 둘은 이름이 같기 때문에 구분하기 위해 Car 클래스의 필드에는 자신의 클래스를 의미하는 this를 붙임. 아무것도 붙이지 않고 color라고 하면 파라미터 변수를 가리킴

Section 01 클래스(20) public 접근 제어 수식어 public 접근 제어 수식어는 private과 반대로 외부(모든 클래스)에서 접근이 가능하도록 하는 예약어. 일반적으로 private은 필드 앞에 붙여서 사용, public은 메소드 앞에 붙여서 사용. 따라서 필드는 외부에서 함부로 변경할 수 없도록 하고, 외부에 공개된 메소드를 통해 접근하도록 함.

저자 한마디 default와 protected 접근 제어 수식어 자주 사용하지는 않지만 default와 protected 접근 제어 수식어도 있다. 둘 다 같은 패키지 안에서는 접근이 가능하지만, default의 경우 하위 클래스는 접근하지 못하고 protected는 서브 클래스에서 접근이 가능하다. 특별히 필드나 메소드에 아무것도 붙이지 않으면 default가 기본으로 설정된다. 즉 같은 패키지 안에서는 접근이 가능하다. (서브 클래스는 12장에서, 패키지는 14장에서 살펴볼 것이다.) public, private, default, protected, 4개의 접근 제어 수식어(또는 접근 제한자)를 통해 객체 지향 프로그래밍의 특징인 캡슐화와 정보 은닉 등이 구현된다. 참고로 접근 제어 수식어는 public>protected>default>private의 순서로 공개적이다. 지금까지의 내용을 표로 요약 하면 다음과 같다.

Section 01 클래스(21)

Section 01 클래스(22) private, public 접근 제어 수식어의 활용

Section 01 클래스(23)

Section 01 클래스(24)

Section 02 생성자(1) 생성자 클래스의 이름과 동일한 메소드를 말함, 주로 초기화할 때 사용 [실습 11-1]의 16~18행 16행에서 myCar1 인스턴스를 생성한 후, 17행에서 색상을 빨강으로 초기화하고, 18행에 서는속도를 0으로 초기화. 16행에서 인스턴스를 생성하면서 동시에 빨강과 0으로 초기화 할 경우 코드가 간결해지 고, 인스턴스를 생성하면서 값을 초기화하기 때문에 필드에 초깃값을 대입하는 것을 잊어 버리는 일도 없을 것임

Section 02 생성자(2) 생성자의 기본 생성자는 클래스와 이름이 동일 [실습 11-1]의 16~18행

Section 02 생성자(3) 기본 생성자

Section 02 생성자(4)

Section 02 생성자(5) 파라미터가 있는 생성자

Section 02 생성자(6)

Section 02 생성자(7) 메소드 오버로딩(overloading) 같은 클래스 내에서 메소드의 이름이 같아도 파라미터의 개수나 데이터 형식만 다르면 여러 개를 선언할 수 있음. 생성자도 메소드의 일종이므로 메소드 오버로딩이 가능 Car 클래스에 다음과 같이 여러 개의 생성자를 만들 수 있음

Section 02 생성자(8)

Section 02 생성자(9)

Section 02 생성자(10)

Section 03 인스턴스 변수와 클래스 변수(1) 인스턴스 변수는 인스턴스를 생성해야 공간이 할당되고, 클래스 변수는 클래스 자체에 변수의 공간이 할당되어 있음 인스턴스 변수 앞에서 살펴본 Car 클래스의 color나 speed 필드는 인스턴스 변수. 인스턴스 변수는 인스턴스를 생성해야 사용할 수 있음 설계도(클래스)를 이용하여 main( ) 메소드에서 자동차(인스턴스) 만들기

Section 03 인스턴스 변수와 클래스 변수(2) 인스턴스 변수의 개념

Section 03 인스턴스 변수와 클래스 변수(3) 클래스 안에 공간이 할당된 변수

Section 03 인스턴스 변수와 클래스 변수(4)

Section 03 인스턴스 변수와 클래스 변수(5) 4행 : 클래스 변수 count를 선언하면 이 변수는 클래스 자체에 공간이 할당 13, 16, 19행 : 인스턴스를 생성해도 count는 인스턴스에 속하지 않고 클래스에 남아 있음 인스턴스를 생성할 때 6~8행의 생성자가 호출되며, 생성자에는 count(생산 된 자동차의 총대수)를 1씩 증가시킴 20행 : ‘클래스이름.count’. 즉 클래스 변수 count에 접근하기 위해 ‘인스턴스이름.count’ 또 는 ‘클래스이름.count’ 모두 사용할 수 있음

Section 03 인스턴스 변수와 클래스 변수(6) 인스턴스 메소드와 클래스 메소드 인스턴스 메소드는 인스턴스를 먼저 생성한 다음 ‘인스턴스이름.메소드이름( )’ 방식으로 호출하는 것을 말함 클래스 메소드는 메소드 이름 앞에 ‘static’ 키워드를 붙임

Section 03 인스턴스 변수와 클래스 변수(7) 4행 : count에 직접 접근하지 못하도록 private을 붙임. 이제 count는 6행의 생성자와 10행의 getCount( ) 메소드에서만 접근이 가능 10행 : static 키워드를 붙여서 getCount( ) 메소드를 클래스 메소드로 지정. 즉 인스턴스가 생성되기 전에도 18행에서 getCount( ) 메소드를 ‘클래스이름.메소드이름( )’ 형식으로 호출 가능