어서와 Java는 처음이지! 제5장 클래스, 객체, 메소드.

Slides:



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

목 차 C# 언어 특징 .NET 프레임워크 C# 콘솔 프로그램 C# 윈도우 프로그램 실습 프로그래밍세미나 2.
01_ 가상 함수를 사용한 다형성의 구현 02_ 오버라이딩
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
Power Java 제3장 이클립스 사용하기.
최윤정 Java 프로그래밍 클래스 상속 최윤정
5장. 객체지향과 클래스.
Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스
제 9 장 구조체와 공용체.
Report #2 - Solution 문제 #1: 다음과 같이 프로그램을 작성하라.
컴퓨터 프로그래밍 기초 [Final] 기말고사
7장 배열 ②.
Lesson 5. 레퍼런스 데이터형.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
4.1 자바 응용 프로그램 분석 4.2 식별자(identifier)와 예약어 4.3 변수와 자료형
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
Lesson 6. 형변환.
5장. 참조 타입.
Power Java 제7장 클래스와 객체.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
C++ Espresso 제12장 템플릿.
두근두근 파이썬 수업 13장 객체란 무엇인가요?.
제4장 클래스와 객체 객체 지향 기법을 이해한다. 클래스를 작성할 수 있다. 클래스에서 객체를 생성할 수 있다.
제7장 클래스와 객체.
Java 6장. 클래스 : 속성 public class SumTest {
Lesson 7. 클래스와 메소드 - 1.
컴퓨터 프로그래밍 실습 #6 제 4 장 클래스 작성.
자바 5.0 프로그래밍.
11장. 1차원 배열.
13. 연산자 오버로딩.
7장 인터페이스와 추상 클래스.
Method & library.
JA A V W. 03.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
어서와 C언어는 처음이지 제14장.
Lesson 4. 수식과 연산자.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
C++ Espresso 제8장 객체 지향 소개.
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
에어 조건문.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
6강. 객체지향 프로그램의 시작 객체지향 이전의 프로그래밍 객체지향의 등장 배경과 이해 메소드의 이해
20장. 객체지향 프로그래밍 01_ 객체지향 프로그래밍의 시작.
제 4장. 객체 지향 프로그래밍 시작하기 학기 프로그래밍언어및실습 (C++).
자바 5.0 프로그래밍.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
Power Java 제11장 상속.
5강. 배열 배열이란? 배열의 문법 변수와 같이 이해하는 배열의 메모리 구조의 이해 레퍼런스의 이해 다차원 배열
JA A V W. 06.
CHAP 21. 전화, SMS, 주소록.
12. 상속 : 고급.
객체기반 SW설계 팀활동지 4.
제 15 강 문자와 코드 shcho.pe.kr.
에어 PHP 입문.
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
Lecture 04 객체지향 페러다임 Kwang-Man Ko
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
.Net FrameWork for Web2.0 한석수
어서와 C언어는 처음이지 제21장.
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
OOP Practices OOP presentation 6 작성자 Kimjinsik 소속 Mobile computing Lab
7 생성자 함수.
6 객체.
Presentation transcript:

어서와 Java는 처음이지! 제5장 클래스, 객체, 메소드

실제 세계는 객체로 이루어진다.

객체와 메시지

객체 지향이란? 실제 세계를 모델링하여 소프트웨어를 개발하는 방법

객체

객체란? 객체(Object)는 상태와 동작을 가지고 있다. 객체의 상태(state)는 객체의 특징값(속성)이다. 객체의 동작(behavior) 또는 행동은 객체가 취할 수 있는 동작

필드와 메소드

중간 점검 문제

메시지 소프트웨어 객체는 메시지(message)를 통해 다른 소프트웨어 객체와 통신하고 서로 상호 작용한다.

절차 지향과 객체 지향 절차 지향 프로그래밍(procedural programming): 문제를 해결하는 절차를 중요하게 생각하는 방법 객체 지향 프로그래밍(Object-Oriented Programming): 데이터와 절차를 하나의 덩어리(객체)로 묶어서 생각하는 방법이다.

객체 지향 방법 객체 지향으로 소프트웨어를 작성하는 것은 컴퓨터 하드웨어 부품을 구입하여서 컴퓨터를 조립하는 것과 비슷하다.

중간 점검 문제 객체들은 ________전달을 통해서 서로 간에 상호 작용을 한다. 자동차 객체에서 생각할 수 있는 메시지와 매개 변수에 대하여 나열하여 보라.

절차 지향과 객체 지향

중간 점검 문제 객체 지향 프로그래밍은 ________들을 조합하여서 프로그램을 작성하는 기법이다. 2. 객체 지향 프로그래밍의 시작은 __________년대에 개발된 ________언어이다.

객체 지향의 3대 특징 캡슐화 상속 다형성

캡슐화 캡슐화(encapsulation): 관련된 데이터와 알고리즘(코드)이 하나의 묶음으로 정리되어 있는 것

캡슐화와 정보 은닉 정보 은닉(information hiding)은 객체를 캡슐로 싸서 객체의 내부를 보호하는 하는 것이다. 즉 객체의 실제 구현 내용을 외부에 감추는 것이다.

캡슐화와 정보 은닉

업그레이드가 쉽다. 라이브러리가 업그레이드되면 쉽게 바꿀 수 있다. 정보 은닉이 가능하기 때문에 업그레이드 가능

상속 상속(inheritance): 이미 작성된 클래스(부모 클래스)를 이어받아서 새로운 클래스(자식 클래스)를 생성하는 기법 기존의 코드를 재활용하기 위한 기법

다형성 하나의 이름(방법)으로 많은 상황에 대처하는 기법 개념적으로 동일한 작업을 하는 멤버 함수들에 똑같은 이름을 부여할 수 있으므로 코드가 더 간단해진다

추상화

객체 지향의 장점 신뢰성있는 소프트웨어를 쉽게 작성할 수 있다. 코드를 재사용하기 쉽다. 업그레이드가 쉽다. 디버깅이 쉽다.

쉬운 디버깅 예를 들어서 절차 지향 프로그램에서 하나의 변수를 1000개의 함수가 사용하고 있다고 가정해보자. -> 하나의 변수를 1000개의 함수에서 변경할 수 있다. 객체 지향 프로그램에서 100개의 클래스가 있고 클래스당 10개의 메소드를 가정해보자. -> 하나의 변수를 10개의 메소드에서 변경할 수 있다. 어떤 방법이 디버깅이 쉬울까?

중간 점검 문제 1. 자바에서 코드 재사용이 쉬운 이유는 관련된 ________와 ___________이 하나의 덩어리로 묶여 있기 때문이다. 2. 정보 은닉이란 ________을 외부로부터 보호하는 것이다. 3. 정보를 은닉하면 발생하는 장점은 무엇인가?

클래스 클래스(class): 객체를 만드는 설계도 클래스로부터 만들어지는 각각의 객체를 특별히 그 클래스의 인스턴스(instance)라고도 한다.

클래스의 구조

클래스의 예: 박스 텔레비젼

예제: 객체 생성하기

변수의 종류 기초 변수(primitive variable)에는 실제 데이터값이 저장된다. 참조 변수(reference variable)는 참조 변수는 객체를 참조할 때 사용되는 변수로서 여기에는 객체의 참조값이 저장된다.

객체의 필드와 메소드 사용 도트(.) 연산자 사용!

여러 개의 객체 생성하기

실행 결과

메소드 메소드는 입력을 받아서 처리를 하고 결과를 반환하는 가상적인 상자와 같다.

메소드의 구조

예제 public class Television { int channel; // 채널 번호 int volume; // 볼륨 boolean onOff; // 전원 상태 void print() { System.out.println("채널은 " + channel + "이고 볼륨은 " + volume + "입니다."); }

예제 public class TelevisionTest { public static void main(String[] args) { Television myTv = new Television(); myTv.channel = 7; myTv.volume = 9; myTv.onOff = true; myTv.print(); Television yourTv = new Television(); yourTv.channel = 9; yourTv.volume = 12; yourTv.onOff = true; yourTv.print(); } 채널은 7이고 볼륨은 10입니다. 채널은 9이고 볼륨은 12입니다.

예제 설명

메소드의 종료 return 을 사용한다. void myMethod() { for( int i=0; i<10; i++ ) { if( i == 7 ) return; }

메소드의 반환값

예제 public class T elevision { int channel; // 채널 번호 int volume; // 볼륨 boolean onOff; // 전원 상태 void print() { System.out.println("채널은 " + channel + "이고 볼륨은 " + volume + "입니다."); } int getChannel() { return channel;

예제 public class TelevisionTest { public static void main(String[] args) { Television myTv = new Television(); myTv.channel = 7; myTv.volume = 9; myTv.onOff = true; int ch = myTv.getChannel(); System.out.println("현재 채널은 " + ch + "입니다."); } 현재 채널은 7입니다.

예제 설명

인수와 매개 변수 메소드 호출시 전달하는 값을 인수(argument) 메소드에서 값을 받을 때 사용하는 변수를 매개 변수(parameter)

예제 public class Math { int add(int x, int y) { return x + y; } public class MathTest { public static void main(String[] args) { int sum; Math obj = new Math(); sum = obj.add(2, 3); System.out.println("2와 3의 합은 " + sum); sum = obj.add(7, 8); System.out.println("7와 8의 합은 " + sum); } 2와 3의 합은 5 7와 8의 합은 15

예제 설명

예제 public class Television { int channel; // 채널 번호 int volume; // 볼륨 boolean onOff; // 전원 상태 void print() { System.out.println("채널은 " + channel + "이고 볼륨은 " + volume + "입니다."); } int getChannel() { return channel; void setChannel(int ch) { channel = ch;

예제 public class TelevisionTest { public static void main(String[] args) { Television myTv = new Television(); myTv.setChannel(11); int ch = myTv.getChannel(); System.out.println("현재 채널은 " + ch + "입니다."); } 현재 채널은 11입니다.

예제 설명

Lab: 자동차 클래스 작성

예제 public class Car { String color; // 색상 int speed; // 속도 int gear; // 기어 @Override public String toString() { return "Car [color=" + color + ", speed=" + speed + ", gear=" + gear + "]"; } void changeGear(int g) { gear = g; void speedUp() { speed = speed + 10; void speedDown() { speed = speed - 10;

예제 public class CarTest { public static void main(String[] args) { Car myCar = new Car(); myCar.changeGear(1); myCar.speedUp(); System.out.println(myCar); } Car [color=null, speed=10, gear=1]

메소드 오버로딩 자바에서는 같은 이름의 메소드가 여러 개 존재할 수 있다. 이것을 메소드 오버로딩(method overloading)이라고 한다.

예제 public class MyMath { // 정수값을 제곱하는 메소드 int square(int i) { return i * i; } // 실수값을 제곱하는 메소드 double square(double i) {

예제 public class MyMathTest { public static void main(String args[]) { MyMath obj = new MyMath(); System.out.println(obj.square(10)); System.out.println(obj.square(3.14)); } 100 9.8596

예제 설명

UML UML(Unified Modeling Language): UML은 클래스만을 그리는 도구는 아니고 객체지향설계 시에 사용되는 일반적인 모델링 언어라고 할 수 있다. UML을 사용하면 소프트웨어를 본격적으로 작성하기 전에 구현하고자 하는 시스템을 시각화하여 검토할 수 있다.

가시성 표시자 필드나 메소드의 이름 앞에는 가시성 표시자(visibility indicator)가 올 수 있다

클래스 간의 관계

UML의 예 Car 예제를 UML로 그려보면 다음과 같다.

Television 클래스의 UML

String 클래스 문자열은 자바에서 기초 자료형이 아니다.

String 클래스의 객체 생성 String s = new String("Hello World!"); // 선언과 동시에 초기화

String 클래스의 메소드

String 클래스 사용하기 public class StringTest {    public static void main (String[] args)    {       String proverb = "A barking dog"; // new 연산자 생략       String s1, s2, s3, s4; // 참조 변수로서 메소드에서 반환된 참조값을 받는다.         System.out.println ("문자열의 길이 =" + proverb.length());       s1 = proverb.concat (" never Bites!"); // 문자열 결합       s2 = proverb.replace ('B', 'b'); // 문자 교환       s3 = proverb.substring (2, 5); // 부분 문자열 추출       s4 = proverb.toUpperCase(); // 대문자로 변환       System.out.println(s1);       System.out.println(s2);       System.out.println(s3);       System.out.println(s4);    } }

예제 문자열의 길이 =13 A barking dog never Bites! A barking dog bar

문자열의 결합 + 연산자를 사용한다. String subject = "Money"; String other = " has no value if it is not used"; String sentence = subject + other;  // "Money has no value if it is not used"

수치값-> 문자열 자바에서는 문자열과 기초 자료형 변수를 결합하게 되면 자동적으로 기초 자료형을 문자열로 변환한다. int x = 20; System.out.println("결과값은 " + x); // ”결과값은 20” 이 출력된다. String answer = "The answer is " + 100; // “The answer is 100"

문자열->수치값 즉 문자열 “123”을 숫자 123으로 변환하려면 어떻게 하여야 하는가? 자바에는 이것을 전문으로 해주는 클래스가 있다. 바로 랩퍼 클래스인 Integer 클래스이다.

예제 문자열을 기초 자료형으로 변환하려면 각 랩퍼 클래스의 parseXXX() 메소드를 사용한다. int i = Integer.parseInt("123"); // 변수 i에 정수 123이 저장된다. double d = Double.parseDouble("3.141592"); // 변수 d에 실수 3.141592가 저장된다.

LAB: 사용자에게 문자열을 받아서 문자열이 “www”로 시작하는지를 검사하는 프로그램을 작성해 보자. 사용자가 “quit”를 입력하면 프로그램을 종료한다. 문자열을 입력하세요> www.google.com www.google.com 은 'www'로 시작합니다. 문자열을 입력하세요> naver.com naver.com 은 'www'로 시작하지 않습니다. 문자열을 입력하세요> quit

String 클래스 사용하기 import java.util.Scanner; public class StringTest { public static void main(String a[]) { String str; Scanner sc = new Scanner(System.in); while (true) { System.out.print("문자열을 입력하세요> "); str = sc.next(); if (str.equals("quit") == true) break; if (str.matches("^www\\.(.+)")) { System.out.println(str + " 은 'www'로 시작합니다."); } else { System.out.println(str + " 은 'www'로 시작하지 않습니다."); }

Q & A