5 장 객체 지향 프로그래밍 5.1 객체 지향 프로그래밍의 개념 5.2 객체 지향 프로그래밍 2018-12-09.

Slides:



Advertisements
Similar presentations
프로젝트 구성. 프로젝트 델파이 프로그램의 기본 단위 즉, 델파이로 만드는 프로그램을 구성하 는 모든 파일들의 집합 구성파일 확인 –View 메뉴 -> Project Manager 메뉴 – 프로젝트 파일 (DPR 확장자 ) – 폼 관련 파일 (FRM 확장자 ) – 소스.
Advertisements

Visual Basic 활용 참고 교재  『쉽게 따라하는 VB 6 프로그래밍』  저 자 : 하태현, 정용덕  출 판 : 기전연구사, 2004  『엑셀 VBA 프로그래밍 ( 고급 ) 』  저 자 : 오양환 외  출 판 : 기전연구사,
VISUAL BASIC 양 계 탁.
C++ Espresso 제1장 기초 사항.
객체지향 프로그래밍.
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
예제로 배우는 Visual Basic 계산기로 익히는 연산자
개정판 Visual Basic 6.0 바로가기.
1장 Visual Basic 2010 시작 1.1 프로그램에 대한 기초 1.2 Visual Basic 버전
프로시저 와 인수전달 컴퓨터응용 및 실습 I.
Chapter 02 자바 기본구조 자바 프로그래밍의 기초적인 문법을 소개
8. 객체와 클래스 (기본).
명품 JAVA Essential.
명품 JAVA Programming.
[INA470] Java Programming Youn-Hee Han
10장 객체-지향 프로그래밍 II ©창병모.
JAVA 프로그래밍 6장 객체지향프로그래밍의 핵심.
객체지향 언어와 클래스, 객체 ㅎㅎ 개요 클래스의 선언, 객체의 생성 및 속성 참조 방식 멤버 변수 메소드 한빛미디어(주)
자바 5.0 프로그래밍.
프로그래밍 언어론 제 9 장 객체 지향 개념 객체 지향 방법론 객체 모델링 객체 지향 언어 C++ 객체 지향 언어 CLOS
제 2 장 기본 문법 (1-2) 주제 : 객체, 변수, 모듈, 상수.
화면(UI) 기반 도메인모델 작성 2014년 8월.
5장 기본 컨트롤 응용프로그래밍.
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 03. 클래스의 기본.
명품 Java Programming.
설계및프로젝트기본I 2017년 1학기(02분반).
Visual Basic 함수.
이벤트(Event) 처리하기 윈도우 프로그램에서는 이벤트를 통하여 실행 중인 프로그램에게 사용자의 요구사항을 알린다.
명품 C++ 7장 프렌드와 연산자 중복.
ADO컨트롤을 이용하여 데이터를 관리하는 방법과 데이터베이스내의 레코드들을 리포트 형식으로 출력하는 디자인 기능을 알아본다.
Visual Basic 연산자.
DataScience Lab. 박사과정 김희찬 (월)
ASP.NET Mobile Controls
RFID Programming (출결관리 프로그램)
6.3 툴바와 이미지 리스트 사용하기.
6.3 툴바와 이미지 리스트 사용하기.
3 장 Visual Basic 2010 기본 문법 3.1 변수 3.2 데이터 형식 3.3 연산자 3.4 제어문
C++ 개요 객체지향 윈도우즈 프로그래밍 한국성서대학교 유일선
Visual Basic 기초 1 목표: 컴퓨터기반제어에 관련된 학습을 하기 전에 Visual Basic의 기초를 살펴본다.
Visual Basic 반복문.
3 장 Visual Basic 2010 기본 문법 3.4 제어문 1) 조건문 2) 반복문 3) 기타 제어문
명품 C++ 프로그래밍 1장. C++ 시작.
비주얼 프로그래밍(2분반) 강의노트 2분반 = 월/목.
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
소프트웨어 공학 (Software Engineering)
' Strategic Alliance Partner with '
가상함수와 추상 클래스.
메소드와 클래스 정의 및 문제 풀이 Method and Class Define and Problem Solve
제 2장 어휘구조와 자료형 토 큰 리 터 럴 주 석 자 료 형 배 열 형.
주제 : 배열, 사용자정의 데이터형, 프로시저와 함수 등..
윈도우 계산기 윈도우 보조프로그램 4칙연산 외 10여가지 기능 구현 ⑥ 메뉴 ⑤ 메모리 ③ 단항연산 ④ 지우기
프로그래밍 원리 Chapter 04 자료 처리와 연산자 신한대학교 IT융합공학부 박 호 균.
Java Chapter 4 ~ 주차.
컴퓨터공학실습(I) 3주 인공지능연구실.
비주얼 프로그래밍 1분반 화/목.
CH2. ASP.NET 페이지 분석 HTML ASP ASP.NET 의 차이점.
Chapter 02. 소프트웨어와 자료구조.
Java 3장. 자바의 기본 구조 I : 변수, 자료형, 연산자 public class SumTest {
비주얼 프로그래밍(2분반) 강의노트 2분반 = 월/목.
[ 단원 06 ] 상속과 다형성.
2장 비주얼베이직 시작하기 2.1 비주얼베이직 프로그래밍 스타일 2.2 비주얼베이직 시작하기.
3장,4장 발표 서정우.
자바 5.0 프로그래밍.
C# 10장. 참조형.
1장 Visual Basic 2010 시작 1.1 프로그램에 대한 기초 1.2 Visual Basic 버전
새로운 타입 정의하기 Defining new types
2장 첫 번째 응용 프로그램 작성
실습과제 1번 /* 1. 멤버 변수로 반경 radius를 갖고, 그 값을 모니터에 출력하는
Java의 정석 제 7 장 객체지향개념 II-3 Java 정석 남궁성 강의
C++ 언어의 특징
Presentation transcript:

5 장 객체 지향 프로그래밍 5.1 객체 지향 프로그래밍의 개념 5.2 객체 지향 프로그래밍 2018-12-09

객체 지향 프로그래밍 5.2 객체 지향 프로그래밍 (7) 상속(Inheritance) 1) 상속이란 ? Visual Basic.Net에서는 단일 상속만 지원한다. 만약 다중 상속이 필요한 경우에는 인터페이스(Interface)를 구현하는 방식을 사용한다. 자식 클래스 정의 자식 클래스인 TheDrivedClass에 새로운 멤버인 속성과 메소드를 추가함으로써 부모 클래스인 TheBaseClass의 기능을 확장할 수 있다. Public Class  TheDrivedClass     Inherits TheBaseClass      '속성과 메소드 등을 추가한다. End Class 2018-12-09

객체 지향 프로그래밍 5.2 객체 지향 프로그래밍 ① NotInheritable 키워드 사용 상속을 위해 부모 클래스를 사용할 수 없도록 클래스를 정의하는데 사 용한다. NotInheritable 키워드를 사용한 부모 클래스 정의 만약 다른 클래스가 TheBaseClass 클래스로부터 상속을 시도하면 컴파일러 에러가 발생한다. Public NotInheritable Class  TheBaseClass      ... End Class Public Class  TheDrivedClass      Inherits TheBaseClass   '컴파일러 에러 발생     ... 2018-12-09

객체 지향 프로그래밍 5.2 객체 지향 프로그래밍 ② MustInherit 키워드 사용 클래스의 인스턴스를 생성할 수 없도록 클래스를 정의하는데 사용한다. MustInherit 키워드를 포함하는 클래스는 다른 클래스의 부모 클래스로는 사용될 수 있지만 클래스의 객체를 생성할 수 없고, 부모 클래스 형태로만 사용된다. MustInherit 키워드를 사용하여 부모 클래스 정의 만약 다른 클래스가 TheBaseClass 클래스로 부터 새로운 클래스인 자식 클래스 생성을 시도하면 컴파일 에러가 발생한다. Public MustInherit Class  TheBaseClass ... End Class ‘자식 클래스 Dim NCar As New TheBaseClass()   '컴파일러 에러 발생 2018-12-09

객체 지향 프로그래밍 5.2 객체 지향 프로그래밍 ③ Protected 키워드 사용 정의된 클래스와 그 클래스에서 상속된 자식 클래스에서 포로퍼티, 메소드, 데이터 멤버, 이벤트, 이벤트 핸들러를 한정하는데 사용된다. Protected 키워드를 사용하여 부모 클래스에 있는 멤버들을 정의 이 클래스에서 Protected로 선언된 멤버 필드는 이 클래스와 자식 클래스에서만 접근 가능하다. 만약 이 클래스로부터 상속되지 않은 다른 클래스가 Protected로 선언된 멤버 필드를 사용하면 에러가 발생한다. Public Class  TheBaseClass      '어디에서든지 접근할 수 있다.(모두 사용 가능)             public NoDoor As Integer        '이 클래스와 파생된 클래스에서만 접근(사용)가능하다.      protected color As String     End Class 2018-12-09

객체 지향 프로그래밍 5.2 객체 지향 프로그래밍 ④ 상속 구현 Car 클래스의 속성과 메소드를 상속하여 Bus 클래스를 구현 자식 클래스인 Bus는 부모 클래스인 Car의 모든 속성과 메소드를 상속받아 그대로 사용할 수 있다. 또한, Bus 클래스에 Weight 속성과 BusAccelerate 메소드를 추가하여 사용할 수 있다. Bus는 Car로부터 상속받음 2018-12-09

예제 프로그램 : 상속 예제 프로그램(Bus) 객체 지향 프로그래밍 예제 프로그램 : 상속 예제 프로그램(Bus) Car 클래스의 속성과 메소드를 상속하여 Bus 클래스를 구현한다. Weight 필드 : 버스의 무게를 나타내는 속성 BusAccelerate 메소드 : 무게당 마력(HorsePower)을 계산 1. Microsoft Visual Studio의 메뉴에서 [파일(F)]→[새 프로젝트(P)]를 선택하여 Visual Studio 안에 있는 “새 프로젝트” 화면을 연다. ‘새 프로젝트’ 화면에서 화면 좌측에 있는 ‘설치된 템플릿’의 항목에서 ‘Visual Basic’을 선택하고, 중간의 ‘템플릿’ 항목에서는 [Windows Forms 응용 프로그램]을 선택하여 [확인] 버튼을 클릭한다. 2. 새로운 프로젝트가 생성되었으면 새로운 클래스의 생성이 필요하다. 메뉴 에서 [프로젝트(P)] -> [클래스 추가(C)]를 선택한다. 3. 나타난 ‘새 항목 추가‘ 대화상자에서 템플릿은 클래스로 선택하고, 클래스 의 이름 항목에는 ‘Car.vb’를 입력하고, [추가] 버튼을 클릭한다. 2018-12-09

객체 지향 프로그래밍 4. ‘Car.vb’ 파일을 클릭하여 연다. 그리고 다음의 코드를 Car 클래스 안에 작성한다. Public Class Car '자동차 속도 필드 멤버 Public speed As Integer '자동차 기어단계 필드 멤버 Public GearLevel As Integer '자동차 마력 필드 멤버 Public HorsePower As Integer '읽기전용 speed 속성 설정 : speed값을 반환 ReadOnly Property SpeedPro() As Integer Get Return speed End Get End Property '읽기전용 기어단계 속성 설정 : GearLevel값을 반환 ReadOnly Property GearLevelPro() As Integer Return GearLevel 2018-12-09

객체 지향 프로그래밍 '속도 계산 메소드 서브함수 , Accelerate 속도 = speed * GearLevel Sub Accelerate(ByVal iAccelerate As Integer) Select Case iAccelerate 'speed 계산 Case 1 speed = 10 * iAccelerate GearLevel = 1 Case 2 GearLevel = 2 Case 3 speed = 15 * iAccelerate GearLevel = 3 Case 4 speed = 20 * iAccelerate GearLevel = 4 Case 5 GearLevel = 5 Case Else speed = 0 GearLevel = 0 End Select End Sub End Class 2018-12-09

객체 지향 프로그래밍 5. Bus 클래스를 추가한다. ‘새 항목 추가‘ 대화상자에서 템플릿은 ‘클래스'로 선택하고, 하단의 클래스 이름 항목에는 ‘Bus.vb’를 입력하고, [추가] 버튼을 클릭한다. 6. Car 클래스로 부터 상속받고, 무게 필드 멤버를 추가 Bus 클래스에 안에 작성한다. 그리고 무게당 마력을 계산하기 위해 Bus 클래스 안에 함수 메소드를 작성한다. HorsePower 속성은 Car 클래스의 속성으로 Bus 클래스에서 상속받아 사용하는 속성이다. Public Class Bus 'Car 클래스로부터 상속 Inherits Car '자동차 무게 멤버 Public Weight As Integer '무게당 마력계산 메소드 함수 Function BusAccelerate() As Double Dim WegperHP As Double '무게당 마력 계산 WegperHP = CType(HorsePower, Double) / CType(Weight, Double) Return WegperHP End Function End Class 2018-12-09

객체 지향 프로그래밍 7. 폼을 설계한다. 2018-12-09

객체 지향 프로그래밍 8. 폼과 각 컨트롤에 대한 속성값을 설정한다. 객체의 종류 객체 명 속성 및 설정 값 폼 Form1 Text : Bus 명령 버튼 Button1 (Name) : btnRun Text : 실행 Button2 (Name) : btnClose Text : 종료 레이블 Label1 Text : 버스 마력 : Label2 Text : 버스 무게 : Label3 Text : 기어 단계 : Label4 Text : 버스의 무게당 마력 : Label5 Text : 버스의 속력 : 텍스트 박스 TextBox1 (Name) : txtPower Text : TextBox2 (Name) : txtWeight TextBox3 (Name) : txtGear TextBox4 (Name) : txtPW Enable : False TextBox5 (Name) : txtSpeed 2018-12-09

객체 지향 프로그래밍 9. [실행] 버튼을 더블 클릭하여 btnRun_Click 이벤트 서브 프로시저를 작성한다. Public Class Form1 Private Sub btnRun_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRun.Click '새로운 Bus 객체를 생성, Bus는 Bus 클래스 Dim OurBus As Bus OurBus = New Bus() '버스의 마력, 무게 치환 OurBus.HorsePower = txtPower.Text OurBus.Weight = txtWeight.Text 'Accelerate 메소드를 이용하여 속도계산 OurBus.Accelerate(txtGear.Text) '무게당 마력을 출력한다. txtPW.Text = OurBus.BusAccelerate '버스의 속력을 출력한다. txtSpeed.Text = OurBus.speed End Sub 2018-12-09

객체 지향 프로그래밍 10. [종료] 버튼을 더블 클릭하여 btnClose_Click 이벤트 서브 프로시저를 작성한다. Private Sub btnClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClose.Click Application.Exit() End Sub End Class 2018-12-09

객체 지향 프로그래밍 11. 프로젝트를 실행한다. 12. 프로젝트를 저장한다. 메뉴에서 [파일] →[모두 저장(L)]을 선택하여 프로젝트를 저장한다. 프로젝트 저장 대화상자에서 이름을 “Bus”로, 위치를 “C:\VB예제 \chapter05”로 입력하고, [저장] 버튼을 클릭하면 프로젝트가 저장된다. 2018-12-09

객체 지향 프로그래밍 5.2 객체 지향 프로그래밍 2) 오버라이딩(Overriding)과 오버로딩(Overloading) 부모 클래스로 부터 자식 클래스가 메소드 및 속성 등을 상속받을 때 상속받는 기능이 자식 클래스에서 원하는 기능과 같지 않을 때 자식 클래스에서 부모 클래스의 메소드를 재정의하여 기능을 변경한다. ① 메소드 오버라이딩 부모 클래스에서 정의된 메소드에 대하여 새롭게 구현하는 것이다. 오버라이딩에 관계된 자식 클래스의 수행 코드 생성에 키워드인 Overridable, MustOverride, Overides, NotOverridable를 사용한다. Overridable 키워드는 자식 클래스에 오버라이드 할 수 있는 경우에 사용한다. 부모 클래스의 메소드 멤버에서 Overridable 키워드를 사용한 경우 Public Class BaseClass Public Overridable Sub OverrideMethod()          MessageBox("기초 클래스 OverrideMethod“)   End Sub   ...   Public Sub OtherMethod()          MessageBox("오버라이드 하지 않은 OtherMethod“) End Class  2018-12-09

객체 지향 프로그래밍 5.2 객체 지향 프로그래밍 MustOverride 키워드는 파생된 모든 자식 클래스에서 반드시 오버라이드 해야 하는 부모 클래스를 생성하는 경우에 사용한다. Overrides 키워드는 상속받은 자식 클래스 안에서 메소드를 부모 클래스 메소드로 대체한다. NotOverridable 키워드는 오버라이드할 수 없을 때 사용한다. Public Class DrivedClass   inherits BaseClass   Public Overrides Sub OverrideMethod()          MessageBox("BaseClass에서 파생된 OverrideMethod“)   End Sub    End Class  2018-12-09

예제 프로그램 : 오버라이드 예제 프로그램(OverrideMethod) 객체 지향 프로그래밍 예제 프로그램 : 오버라이드 예제 프로그램(OverrideMethod) 부모 클래스에서 Overridable 키워드를 사용하고, 자식 클래스에서 Overrides 키워드를 사용하여 재정의 메소드를 구현한다. 부모 클래스인 Car에서 속도를 구하는 메소드인 Accelerate는 자식 클래스인 Bus에서 Accelerate 메소드를 그대로 사용하기에는 적합하지 않아서 수정한다. 1. Microsoft Visual Studio의 메뉴에서 [파일(F)]→[새 프로젝트(P)]를 선택하여 Visual Studio 안에 있는 “새 프로젝트” 화면을 연다. ‘새 프로젝트’ 화면에서 화면 좌측에 있는 ‘설치된 템플릿’의 항목에서 ‘Visual Basic’을 선택하고, 중간의 ‘템플릿’ 항목에서는 [Windows Forms 응용 프로그램]을 선택하여 [확인] 버튼을 클릭한다. 2. 새로운 프로젝트가 생성되었으면 새로운 클래스의 생성이 필요하다. 메 뉴에서 [프로젝트(P)] -> [클래스 추가(C)]를 선택하여 Car(Car.vb)와 Bus(Bus.vb) 클래스를 생성한다. 2018-12-09

객체 지향 프로그래밍 3. Car 클래스 안에 필드 멤버와 생성자를 추가한다. 메소드를 자식 클래스에서 재 정의하기 위해 Accelerate 메소드 앞에 Overridable 키워드를 추가 한다. Public Class Car 'Public speed As Integer '자동차 속도 필드 멤버 Public Property Speed As Integer '프로퍼티 프로시저 Speed 속성 설정-스피트값을 반환 Overridable Sub Accelerate(ByVal iAccelerate As Integer) '속도 계산 메소드 서브 함수 Select Case iAccelerate 'speed 계산 Case 1 Speed = 10 * iAccelerate Case 2 Case 3 Speed = 15 * iAccelerate Case 4 Speed = 20 * iAccelerate Case 5 Case Else Speed = 0 End Select End Sub End Class 2018-12-09

객체 지향 프로그래밍 4. Car 클래스로 부터 자식 클래스인 Bus 클래스를 작성한다. 부모 클래스의 메소드인 Accelerate를 재정의하기 위해 Accelerate 메소드 앞에 Overrides 키워드를 추가한다. Public Class Bus 'Car 클래스로부터 상속 Inherits Car '속도 계산 메소드 서브함수(재정의 메소드) Overrides Sub Accelerate(ByVal iAccelerate As Integer) Select Case iAccelerate 'speed 계산 Case 1 Speed = 8 * iAccelerate Case 2 Case 3 Speed = 12 * iAccelerate Case 4 Speed = 15 * iAccelerate Case 5 Speed = 18 * iAccelerate Case Else Speed = 0 End Select End Sub End Class 2018-12-09

객체 지향 프로그래밍 5. 폼을 설계한다. 6. 폼과 각 컨트롤에 대한 속성값을 설정한다. 객체의 종류 객체 명 속성 및 설정 값 폼 Form1 Text : 버스 명령 버튼 Button1 (Name) : btnRun Text : 오버라이딩 실행 Button2 (Name) : btnClose Text : 종료 레이블 Label1 Text : 버스의 기어 단계 : Label2 Text : 버스의 속도 : 텍스트 박스 TextBox1 (Name) : txtGear Text : TextBox2 (Name) : txtSpeed Enable : False 2018-12-09

객체 지향 프로그래밍 7. [오버라이딩 실행] 버튼을 더블 클릭하여 btnRun_Click 이벤트 서브 프로시저를 작성한다. Public Class Form1 Private Sub btnRun_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRun.Click '새로운 Bus 객체를 생성 : Bus는 Bus 클래스 Dim OurBus As Bus OurBus = New Bus() 'Accelerate 메소드를 이용하여 속도계산 OurBus.Accelerate(txtGear.Text) '버스의 속도(speed속성) 값을 출력한다 txtSpeed.Text = OurBus.Speed '기어단계설정 값 확인 If txtGear.Text > 5 Or txtGear.Text < 0 Then MessageBox.Show("버스의 기어단계설정 값이 잘못되었음!") Return End If End Sub End Class 2018-12-09

객체 지향 프로그래밍 8. [종료] 버튼을 더블 클릭하여 btnClose_Click 이벤트 서브 프로시저를 작성한다. Private Sub btnClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClose.Click Application.Exit() End Sub End Class 2018-12-09

객체 지향 프로그래밍 9. 프로젝트를 실행한다. 10. 프로젝트를 저장한다. 버스의 기어 단계를 입력하고, [실행] 버튼을 클릭한다. 10. 프로젝트를 저장한다. 메뉴에서 [파일] →[모두 저장(L)]을 선택하여 프로젝트를 저장한다. 프로젝트 저장 대화상자에서 이름을 “OverrideMethod”로, 위치를 “C:\VB 예제\chapter05”로 입력하고, [저장] 버튼을 클릭하면 프로젝트가 저장된 다. 2018-12-09

객체 지향 프로그래밍 5.2 객체 지향 프로그래밍 ② 메소드 오버로딩(Overloading) 메소드 오버로딩은 같은 이름을 가진 메소드에 서로 다른 매개변수의 데이터 형식과 개수를 정의한 것이다. 같은 이름을 가지지만 데이터의 형식과 개수가 서로 다른 메소드를 정의함으로서 프로그램 코딩과 이해성을 쉽게 하는 기능이다. 다음 예는 원의 면적을 계산하는 메소드를 오버로드 하는 방법 Integer, Single, Double 정보에 다른 형식을 할당하는 코드 Overloads Function RadiusAreaCalculate(ByVal radius As Integer) As Integer         '반경을 매개변수로 받아서 원주율(radius * radius) 계산         '원의 면적 계산(원주율 * PI)          Return radius * radius * Math.PI End Function Overloads Function RadiusAreaCalculate(ByVal radius As Single) As Single Overloads Function RadiusAreaCalculate(ByVal radius As Double) As Double Return radius * radius * Math.PI 2018-12-09

예제 프로그램 : 오버로딩 예제 프로그램(MethodOverloading) 객체 지향 프로그래밍 예제 프로그램 : 오버로딩 예제 프로그램(MethodOverloading) 부모 클래스에서 Overloads 키워드를 사용하여 같은 이름인 3개의 메소드를 정의한다. 자식 클래스에서 각 데이터 형식에 따라 사용하도록 구현한다. 1. Microsoft Visual Studio의 메뉴에서 [파일(F)]→[새 프로젝트(P)]를 선택하여 Visual Studio 안에 있는 “새 프로젝트” 화면을 연다. ‘새 프로젝트’ 화면에서 화면 좌측에 있는 ‘설치된 템플릿’의 항목에서 ‘Visual Basic’을 선택하고, 중간의 ‘템플릿’ 항목에서는 [Windows Forms 응용 프로그램]을 선택하여 [확인] 버튼을 클릭한다. 2. 새로운 프로젝트가 생성되었으면 새로운 클래스의 생성이 필요하다. 메 뉴에서 [프로젝트(P)] -> [클래스 추가(C)]를 선택하여 Circle(Circle.vb) 클래스를 생성한다. 2018-12-09

객체 지향 프로그래밍 3. Circle 클래스 안에 메소드 함수를 추가한다. Overloads 키워드를 사용하여 같은 이름인 3개의 메소드를 정의한다. Public Class Circle Overloads Function RadiusAreaCalculate(ByVal radius As Integer) As Integer '반경을 매개변수로 받아서 원주율(radius * radius) 계산 '원의 면적 계산(원주율 * PI) Return radius * radius * Math.PI End Function Overloads Function RadiusAreaCalculate(ByVal radius As Single) As Single Overloads Function RadiusAreaCalculate(ByVal radius As Double) As Double End Class 2018-12-09

객체 지향 프로그래밍 4. 폼을 설계한다. 2018-12-09

객체 지향 프로그래밍 5. 폼과 각 컨트롤에 대한 속성값을 설정한다. 객체의 종류 객체 명 속성 및 설정 값 폼 Form1 Text : 원 면적 계산 오버로딩 명령 버튼 Button1 (Name) : btnRun Text : 오버라이딩 실행 Button2 (Name) : btnClose Text : 종료 레이블 Label1 Text : 원의 반지름 : Label2 Text : 데이터 형식 : Label3 Text : 원의 면적 : 텍스트 박스 TextBox1 (Name) : txtRadius Text : TextBox2 (Name) : txtResult Enable : False 콤보 박스 ComboBox1 (Name) : cbType DropDownStyle : DropDownList Items : Integer Single Double 2018-12-09

객체 지향 프로그래밍 6. [실행] 버튼을 더블 클릭하여 btnRun_Click 이벤트 서브 프로시저를 작성한다. Public Class Form1 Private Sub btnRun_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRun.Click '새로운 Circle 객체를 생성 : 'Circle은 Circle 클래스 Dim MyCircle As Circle MyCircle = New Circle() '메소드 오버로딩을 이용하여 원의 면적계산 Select Case cbType.SelectedItem Case "Integer" 'Integer 형식을 리턴하는 RadiusAreaCalculate 메소드 호출 txtResult.Text = MyCircle.RadiusAreaCalculate(Integer.Parse(txtRadius.Text)) Case "Single" 'Single 형식을 리턴하는 RadiusAreaCalculate 메소드 호출 txtResult.Text = MyCircle.RadiusAreaCalculate(Single.Parse(txtRadius.Text)) Case "Double" 'Double 형식을 리턴하는 RadiusAreaCalculate 메소드 호출 txtResult.Text = MyCircle.RadiusAreaCalculate(Double.Parse(txtRadius.Text)) End Select End Sub End Class 2018-12-09

객체 지향 프로그래밍 7. [종료] 버튼을 더블 클릭하여 btnClose_Click 이벤트 서브 프로시저를 작성한다. Private Sub btnClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClose.Click Application.Exit() End Sub 2018-12-09

객체 지향 프로그래밍 8. 프로젝트를 실행한다. 9. 프로젝트를 저장한다. 원의 반지름을 입력하고, 데이터 형식을 선택하여 [실행] 버튼을 클릭한다. 9. 프로젝트를 저장한다. 메뉴에서 [파일] →[모두 저장(L)]을 선택하여 프로젝트를 저장한다. 프로젝트 저장 대화상자에서 이름을 “OverrideMethod”로, 위치를 “C:\VB 예제\chapter05”로 입력하고, [저장] 버튼을 클릭하면 프로젝트가 저장된 다. 2018-12-09

객체 지향 프로그래밍 5.2 객체 지향 프로그래밍 3) 그림자 메소드(Shadow Method) 그림자 메소드는 부모 클래스에 정의된 특정 필드와 이름을 자식 클래 스의 필드에서 정의하고자 할 때 사용한다. 자식 클래스의 해당 메소드에 shadow 키워드를 지정한다. 다음 예는 부모 클래스 BaseClass에서 color로 선언된 Integer 형식의 필드 멤버를 자식 클래스 DerivedClass 에서 같은 이름의 color 필드 멤버를 double 형식으로 재정의 한다. Class BaseClass      Public color As Integer      ... End Class Class DerivedClass      Inherits BaseClass      Public Shadows color As Double 2018-12-09

객체 지향 프로그래밍 5.2 객체 지향 프로그래밍 4) MyClass 키워드 사용 오버라이드(재정의)된 메소드나 속성을 호출하지 않고, 현재 클래스에서 정의된 메소드나 클래스를 호출한다. 다음 예는 MyBase 키워드를 사용하여 클래스 내에서 정의된 메소드를 호출하는 코드 Public Class TheBaseClass     '메소드 오버라이딩     Public Overridable Sub OverrideMethod( )          MessageBox.Show("기초 OverrideMethod")     End Sub     ...     Public Sub OtherMethod( )          '파생 메소드 호출          OverrideMethod( )          '현재 클래스의 메소드 호출          MyClass.OverrideMethod( )     End Sub    End Class 2018-12-09

객체 지향 프로그래밍 5.2 객체 지향 프로그래밍 MyClass 키워드와 Me 키워드의 차이점 Public Class TheDrivedClass     Inherits TheBaseClass         Public Overrides Sub OverrideMethod( ) '메소드 오버라이딩         MessageBox.Show("파생 OverrideMethod")     End Sub End Class Module Module1     Sub Main( )         Dim DClass As TheDrivedClass '새로운 DClass 객체를 생성         DClass = New TheDrivedClass()         DClass.OTherMethod( ) '메소드 호출 End Module MyClass 키워드와 Me 키워드의 차이점 키워드 내 용 MyClass 자식의 클래스에서 정의된 메소드를 호출한다. 부모 클래스에서 정의하고, 자식 클래스에서 재정의된 클래스는 적용되지 않는다. Me 자식 클래스에서 재정의(Override)된 메소드를 호출한다. 2018-12-09

객체 지향 프로그래밍 5.2 객체 지향 프로그래밍 (8) 인터페이스(Interface) 인터페이스는 실제 구현보다는 클래스가 제공하는 서비스를 명시하는 데 사용되며, 일종의 계약서라고 할 수 있다. 한 클래스가 특정 인터페이스를 구현한다는 것은 인터페이스에서 정의하는 기능을 구현하는 것이다. 인터페이스에서 사용할 수 있는 멤버는 프로퍼티, 메소드, 이벤트가 있으며, 상수, 필드, 생성자, 공유 멤버는 인터페이스에서 사용할 수 없다. 다음 예는 인터페이스를 정의하는 간단한 예제 Interface IClassInterface     Property mbrProperty() As String     Sub mbrSub()     Function mbrFunction() As Integer     Event mbrEvent() End Interface 2018-12-09

예제 프로그램 : 인터페이스 예제 프로그램(InterfaceInheritance) 객체 지향 프로그래밍 예제 프로그램 : 인터페이스 예제 프로그램(InterfaceInheritance) 인터페이스를 이용하여 다중 상속을 구현한다. Add 메소드를 AddCalc 인터페이스로, Minus 메소드를 MinusCalc 인터페이스로 구현하여 더하기와 빼기를 하는 클래스를 정의한다. 1. Microsoft Visual Studio의 메뉴에서 [파일(F)]→[새 프로젝트(P)]를 선택하여 Visual Studio 안에 있는 “새 프로젝트” 화면을 연다. ‘새 프로젝트’ 화면에서 화면 좌측에 있는 ‘설치된 템플릿’의 항목에서 ‘Visual Basic’을 선택하고, 중간의 ‘템플릿’ 항목에서는 [Windows Forms 응용 프로그램]을 선택하여 [확인] 버튼을 클릭한다. 2. 새로운 프로젝트가 생성되었으면 새로운 클래스의 생성이 필요하다. 메 뉴에서 [프로젝트(P)] -> [클래스 추가(C)]를 선택하여 Calculate(Calculate.vb) 클래스를 생성한다. 2018-12-09

객체 지향 프로그래밍 3. AddCalc 인터페이스로 Add() 메소드를 선언하고, MinusCalc 인터페이스로 Minus() 메소드를 선언한다. Calculate 클래스 안에 Implements로 다중 상속을 하고 있으며, 2개의 메소드 함수인 Add(), Minus()를 추가한다. Interface AddCalc 'AddCalc 인터페이스로 Add 메소드 선언 Function Add(ByVal x As Integer, ByVal y As Integer) As Integer End Interface Interface MinusCalc 'MinusCalc 인터페이스로 Minus 메소드 선언 Function Minus(ByVal x As Integer, ByVal y As Integer) As Integer Public Class Calculate Implements AddCalc, MinusCalc '인터페이스 다중 상속 'Add 메소드 구현 Public Function Add(ByVal x As Integer, ByVal y As Integer) As Integer _ Implements AddCalc.Add Return x + y End Function ‘Minus 메소드 구현 Public Function Minus(ByVal x As Integer, ByVal y As Integer) As Integer _ Implements MinusCalc.Minus Return x - y End Class 2018-12-09

객체 지향 프로그래밍 4. 폼을 설계한다. 2018-12-09

객체 지향 프로그래밍 5. 폼과 각 컨트롤에 대한 속성값을 설정한다. 객체의 종류 객체 명 속성 및 설정 값 폼 Form1 Text : 인터페이스 상속 명령 버튼 Button1 (Name) : btnRun Text : 실행 Button2 (Name) : btnClose Text : 종료 텍스트 박스 TextBox1 (Name) : txtNum1 Text : 콤보 박스 ComboBox1 (Name) : cbType DropDownStyle : DropDownList Items : + - TextBox2 (Name) : txtNum2 TextBox3 (Name) : txtResult Enable : False 레이블 Label1 Text : = 2018-12-09

객체 지향 프로그래밍 6. [실행] 버튼을 더블 클릭하여 btnRun_Click 이벤트 서브 프로시저를 작성한다. Public Class Form1 Private Sub btnRun_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRun.Click Dim Calc As Calculate '객체 생성 Calc = New Calculate() Dim Acalc As AddCalc '인터페이스 객체 생성 Acalc = Calc Dim Mcalc As MinusCalc Mcalc = Calc Select Case cbType.SelectedItem ' "+", "-" 계산 선택 Case "+" ‘ "+" 계산 : Add 메소드 호출 txtResult.Text = Acalc.Add(Integer.Parse(txtNum1.Text), Integer.Parse(txtNum2.Text)) Case "-" ‘ "-" 계산 : Add 메소드 호출 txtResult.Text = Mcalc.Minus(Integer.Parse(txtNum1.Text), Integer.Parse(txtNum2.Text)) End Select End Sub End Class 2018-12-09

객체 지향 프로그래밍 7. [종료] 버튼을 더블 클릭하여 btnClose_Click 이벤트 서브 프로시저를 작성한다. Private Sub btnClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClose.Click Application.Exit() End Sub 2018-12-09

객체 지향 프로그래밍 8. 프로젝트를 실행한다. 9. 프로젝트를 저장한다. 값을 입력하고, 콤보 박스에서 ‘+’와 ‘-’를 선택하여 [실행] 버튼을 클릭한다. 9. 프로젝트를 저장한다. 메뉴에서 [파일] →[모두 저장(L)]을 선택하여 프로젝트를 저장한다. 프로젝트 저장 대화상자에서 이름을 “InterfaceInheritance”로, 위치를 “C:\VB예제\chapter05”로 입력하고, [저장] 버튼을 클릭하면 프로젝트가 저장된다. 2018-12-09

객체 지향 프로그래밍 5.2 객체 지향 프로그래밍 (9) 대리자(Delegate) 대리자는 다른 개체의 메서드를 참조하는 개체이다. 함수 포인터와 달리 System.Delegate 클래스를 기반으로 하는 참조 형식이다. 대리자는 공유 메서드(클래스의 특정 인스턴스 없이도 호출할 수 있는 메서드)와 인스턴스 메서드를 모두 참조할 수 있다. Delegate 문의 기본 형식 접근 지정자 : 선택 요소이며, 대리자에 엑세스할 수 있는 접근 지정자이다. 접근 지정자는 Public, Protected, Friend, Private가 있다. name : 필수 요소로 대리자 형식의 이름이다. 타입매개변수 : 선택 요소이며, 대리자에 대한 형식 매개변수 목록이다. Type : Function 프로시저를 지정하는 경우는 필수 요소이며, 반환값의 데이터 형식이다. [접근지정자] Delegate [Sub | Function] name [(Of 타입매개변수)] [As Type] 2018-12-09

예제 프로그램 : 대리자 예제 프로그램(Delegate) 객체 지향 프로그래밍 예제 프로그램 : 대리자 예제 프로그램(Delegate) Delegate 를 사용하여 두 수에 대한 더하기와 빼기 연산을 수향하고, 결과를 반 환하는 대리자를 선언한다. DelegateFunction 서브 프로시저는 이 형식의 대리자 인스턴스를 사용하고, 이를 통하여 2개의 수를 연산한다. 1. Microsoft Visual Studio의 메뉴에서 [파일(F)]→[새 프로젝트(P)]를 선택하여 Visual Studio 안에 있는 “새 프로젝트” 화면을 연다. ‘새 프로젝트’ 화면에서 화면 좌측에 있는 ‘설치된 템플릿’의 항목에서 ‘Visual Basic’을 선택하고, 중간의 ‘템플릿’ 항목에서는 [Windows Forms 응용 프로그램]을 선택하여 [확인] 버튼을 클릭한다. 2018-12-09

객체 지향 프로그래밍 2. Form1.vb에 다음의 코드를 추가한다. Public Class Form1 '출력 선택에 사용하는 변수 Public bo As Boolean '대리자 선언을 numAdd, numSubtract 함수의 유형과 같은 형식으로 정의. Delegate Function MathOper(ByVal x As Double, ByVal y As Double) As Double Function numAdd(ByVal x As Double, ByVal y As Double) As Double Return x + y End Function Function numSubtract(ByVal x As Double, ByVal y As Double) As Double Return x - y Sub DelegateFunction(ByVal x As Double, ByVal y As Double, ByVal op As MathOper) '대리자 객체 선언(op As MathOper) Dim calNum As Double '대리자를 통해 numAdd, numSubtract 메서드 호출 calNum = op.Invoke(x, y) If bo Then txtResult.Text += "대리자 연산 Subtract : " + CStr(calNum) + vbCrLf Else txtResult.Text += "대리자 연산 Add : " + CStr(calNum) + vbCrLf End If bo = True End Sub End Class 2018-12-09

객체 지향 프로그래밍 3. 폼을 설계한다. 2018-12-09

객체 지향 프로그래밍 4. 폼과 각 컨트롤에 대한 속성값을 설정한다. 객체의 종류 객체 명 속성 및 설정 값 폼 Form1 Text : 대리자 이벤트 레이블 Label1 Text : 숫자 1 Label2 Text : 숫자 2 텍스트 박스 TextBox1 (Name) : txtNum1 Text : TextBox2 (Name) : txtNum2 명령 버튼 Button1 (Name) : btnCalc Text : 대리자 연산 TextBox3 (Name) : txtResult MultiLine : True 2018-12-09

객체 지향 프로그래밍 5. [대리자 연산] 버튼을 더블 클릭하여 btnCalc_Click 이벤트 서브 프로시저를 작성한다. Private Sub btnCalc_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCalc.Click 'Double 타입의 인수와 AddressOf 연산자를 이용하여 numAdd 함수를 가르키는 '함수 대리자를 인수로 가지는 대리자를 호출 DelegateFunction(txtNum1.Text, txtNum2.Text, AddressOf numAdd) 'Double 타입의 인수와 AddressOf 연산자를 이용하여 numSubtract 함수를 가르키는 DelegateFunction(txtNum1.Text, txtNum2.Text, AddressOf numSubtract) End Sub 2018-12-09

객체 지향 프로그래밍 6. 프로젝트를 실행한다. 7. 프로젝트를 저장한다. 두 개의 값을 입력하고, [대리자 연산] 버튼을 클릭한다. 7. 프로젝트를 저장한다. 메뉴에서 [파일] →[모두 저장(L)]을 선택하여 프로젝트를 저장한다. 프로젝트 저장 대화상자에서 이름을 “Delegate”로, 위치를 “C:\VB예제 \chapter05”로 입력하고, [저장] 버튼을 클릭하면 프로젝트가 저장된다. 2018-12-09

객체 지향 프로그래밍 5.2 객체 지향 프로그래밍 (10) 익명 형식(Anonymous Types) 익명 형식은 데이터 형식에 대한 클래스 정의를 작성하지 않고, 개체 를 만들 수 있는 방법이다. 컴파일러가 대신하여 클래스를 생성한다. 이 클래스는 사용할 수 있는 이름이 없고, Object에서 직접 상속하며, 개체를 선언할 때 지정하는 속성을 포함한다. 데이터 형식의 이름이 지정되지 않기 때문에 해당 형식을 익명 형식(Anonymous Types)이라고 한다. 다음 예는 변수 student를 Name 및 Age라는 두 개의 속성을 가지는 익명 형식의 인스턴스로 선언한다. Dim student = New With {Key .Name = "홍길동", .Age = 21} 2018-12-09

객체 지향 프로그래밍 5.2 객체 지향 프로그래밍 다음 예는 students 테이블은 각각 많은 속성이 있는 학생 개체의 목록이다. nameAgeQuery 변수는 실행할 경우 Name 과 Age인 두 개의 속성을 가지는 익명 형식의 인스턴스 컬렉션을 반환하는 쿼리 정의를 할당한다. 또한, nameGradeQuery 변수는 실행할 경우 Name 및 Grade라는 두 개의 속성을 가지는 익명 형식의 인스턴스 컬렉션을 반환하는 쿼리 정의를 할당한다. Dim nameAgeQuery = From stud In students Select stud.Name, stud.Age Dim nameGradeQuery = From stud In students Select stud.Name, stud.Grade 2018-12-09

객체 지향 프로그래밍 5.2 객체 지향 프로그래밍 ① 익명 형식 선언 익명 형식의 인스턴스 선언에서는 이니셜라이저 목록을 사용하여 해당 형식의 속성을 지정한다. 익명 형식을 선언할 때는 속성만 지정할 수 있고, 메서드나 이벤트와 같은 다른 클래스 요소는 지정할 수 없다. 다음 예에서 student1은 Name과 Age인 두 개의 속성을 가지는 익명 형식의 인스턴스이다. 익명 형식의 인스턴스를 선언하는 것은 개체 이니셜라이저를 사용하여 명명된 형식의 인스턴스를 선언하는 것과 유사하다. Dim student1 = New With {.Name = "김동길", .Age = 23} ' -or- Dim student2 = New With {Key.Name = "한광수", Key.Age = 20} Dim student3 = New Student With {.Name = "김민기", .Age = 22} 2018-12-09

객체 지향 프로그래밍 5.2 객체 지향 프로그래밍 ② 키 속성 키(Key) 속성은 키가 아닌 속성과 기본적인 면에서 차이가 난다. 두 인스턴스가 같은지 확인하기 위해 키 속성의 값만 비교한다. 키 속성 값은 읽기 전용이며 변경할 수 없다 익명 형식의 인스턴스는 같은 익명 형식의 인스턴스인 경우에만 같다(Equals() 사용). 컴파일러에서는 다음 조건에 해당하는 경우 두 인스턴스를 같은 형식의 인스턴스로 처리한다. 동일한 어셈블리에서 선언된다. 해당 속성이 동일한 이름과 유추된 형식을 갖고, 같은 순서로 선언된다. 이름을 비교할 때 대/소문자를 구분하지 않는다. 각 인스턴스에서 동일한 속성이 키 속성으로 표시된다. 각 선언에서 한 개 이상의 속성이 키 속성이다. 2018-12-09

객체 지향 프로그래밍 5.2 객체 지향 프로그래밍 키 속성이 없는 익명 형식의 인스턴스는 자신하고만 같다. 다음 예에서 두 구문 stud1, stud2에 있는 속성 값은 같지만 자신하고만 같기 때문에 False를 출력한다. 'stud과 stud2는 키 값을 가지고 있지 않다. Dim stud1 = New With {.Name = "김민주", .Age = 21} Dim stud2 = New With {.Name = "김민주", .Age = 21} Console.WriteLine(prod1.Equals(prod2)) //False Console.WriteLine(prod1.Equals(prod1)) //True 2018-12-09

객체 지향 프로그래밍 5.2 객체 지향 프로그래밍 (11) 개체 이니셜라이저(Object Initializers) 개체 이니셜라이저는 단일 식으로 복잡한 개체의 속성을 지정할 수 있 다. 개체 이니셜라이저를 사용하면 명명된 형식과 익명 형식의 인스턴스를 만들 수 있다. 명명된 형식과 익명 형식의 인스턴스 선언은 거의 동일해 보일 수 있지만 그 결과는 다르며, 각각의 범주에는 해당하는 기능과 제한 사항이 있다. 다음 예는 개체 이니셜라이저 목록을 사용하여 명명된 클래스 Customer의 인스턴스를 선언하고, 초기화하는 방법 Dim namedCust = New Customer With {.Name = "홍길동"} 2018-12-09

객체 지향 프로그래밍 5.2 객체 지향 프로그래밍 (12) 람다 식(Lambda Expression) 람다 식은 대리자 형식이 가능한 모든 곳에서 사용할 수 있는 이름이 없는 함수 또는 서브루틴이다. 람다 식은 함수 또는 서브루틴이며, 한 줄이나 여러 줄로 구성된다. 또한 현재 범위의 값을 람다 식에 전달할 수 있다. 표준 함수 또는 서브루틴을 만드는 경우와 마찬가지로, Function 또는 Sub 키워드를 사용하여 람다 식을 만든다. 다음 예는 인수를 점증적으로 늘리고, 값을 반환하는 람다 식이다. 한 줄과 여러 줄로 구성된 Function 람다 식 구문 Dim increment1 = Function(x) x + 1 Dim increment2 = Function(x) Return x + 2 End Function ‘정수 인수를 전달하여 람다식(increment1)을 호출 Console.WriteLine(increment1(1)) //값 2 출력 ‘정수 인수를 전달하여 람다식(increment2)을 호출 Console.WriteLine(increment2(2)) //값 4 출력 2018-12-09

객체 지향 프로그래밍 5.2 객체 지향 프로그래밍 다음의 예는 콘솔에 값을 쓰는 람다 식이다. 한 줄과 여러 줄로 구성된 Sub 람다 식 구문 Dim writeline1 = Sub(x) Console.WriteLine(x) Dim writeline2 = Sub(x) Console.WriteLine(x) End Sub writeline1("Hello") //“Hello" 출력 writeline2("World") //“World" 출력 2018-12-09