객체지향 프로그래밍.

Slides:



Advertisements
Similar presentations
멘토링 2 주차 장 프로그래밍을 위한 자바의 자료형  값이 변하지 않는 상수  메모리 기억공간인 변수.
Advertisements

명품 JAVA Programming 제 3 장 반복문, 배열, 예외처리.
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
C++ Espresso 제1장 기초 사항.
Chap05 상속 5.1 상속의 개요 5.2 멤버 변수의 상속 5.3 메소드의 상속과 오버라이딩(Overriding)
7장 배열 ②.
Java Presentation 중간 시험2 풀이
제 4장 문 장 배정문 혼합문 제어문 표준 입출력.
제2장 자바 언어 기초.
제 1 장. JAVA란 작성자 : NLIP.
자바란 무엇인가? JDK의 다운로드 및 설치 방법 Hello, Java 프로그램의 작성 자바 프로그램의 작동 원리
윤 홍 란 제3장 클래스와 객체의 사용-1 윤 홍 란
2주 실습강의 Java의 기본문법(1) 인공지능연구실.
Chapter 02 자바 기본구조 자바 프로그래밍의 기초적인 문법을 소개
8. 객체와 클래스 (기본).
[INA470] Java Programming Youn-Hee Han
명품 JAVA Essential.
명품 JAVA Programming.
Java RMI (Remote Method Invocation)
Java RMI (Remote Method Invocation)
명품 JAVA Programming 제 4 장 클래스와 객체.
Power Java 제4장 자바 프로그래밍 기초.
[INA470] Java Programming Youn-Hee Han
10장 객체-지향 프로그래밍 II ©창병모.
JAVA 프로그래밍 6장 객체지향프로그래밍의 핵심.
Power Java 제10장 배열.
객체지향 언어와 클래스, 객체 ㅎㅎ 개요 클래스의 선언, 객체의 생성 및 속성 참조 방식 멤버 변수 메소드 한빛미디어(주)
자바 5.0 프로그래밍.
Choi, Namseok Java 기초 (Java의 제어문과 배열) Choi, Namseok
01. 직렬화와 역직렬화에 대하여 객체의 직렬화 직렬화와 역직렬화
명품 JAVA Essential.
명품 Java Programming.
프로그래머를 위한 Java 2 제2장 자바 언어 기초
2장 자바환경과 자바 프로그램 2.1 자바 개발 환경 2.2 자바 통합환경 2.3 자바 응용 프로그램과 애플릿 프로그램
윤 홍 란 4 장 클래스 작성 윤 홍 란
2010학년도 2학기 객체지향의 이해.
Power Java 제7장 클래스와 객체.
인터페이스(Interfaces) 강원대학교.
김 정 석 Web Programming 김 정 석
주소록 프로그램.
제 4주 2014년 1학기 강원대학교 컴퓨터학부 담당교수: 정충교
제1장 서론.
2009학년도 1학기 상지대학교 컴퓨터정보공학부 고 광 만
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
Java 8장. 상속 public class SumTest {
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
소프트웨어 공학 (Software Engineering)
메소드와 클래스 정의 및 문제 풀이 Method and Class Define and Problem Solve
Web programming Chap 04 상속 김 정 석
제 2장 어휘구조와 자료형 토 큰 리 터 럴 주 석 자 료 형 배 열 형.
프로그래밍 개론 Ⅰ 제 1장 . 서론 ①.
컴퓨터공학실습(I) 3주 인공지능연구실.
Java IT응용시스템공학과 김형진 교수 5장. 객체지향 개념 public class SumTest {
Chapter3 : 객체지향의 개념 3.1 객체지향(object-oriented)과
Chap02 객체 지향 개념 2.1 객체지향(object-oriented)과 절차지향(procedural-oriented)
JA A V W. 04.
자바 5.0 프로그래밍.
Chapter 02. 소프트웨어와 자료구조.
Java 3장. 자바의 기본 구조 I : 변수, 자료형, 연산자 public class SumTest {
JVM의 구조와 메모리 모델 JVM의 내부 구조 클래스 파일 클래스 로더 메소드(method) 영역 힙(heap) 영역
3장,4장 발표 서정우.
Java RMI (Remote Method Invocation)
6장 클래스(상속).
컴퓨터 프로그래밍: 실습 1 제 1장 . 서론.
Chapter 4 클래스 작성.
Java 5장. 객체지향 개념 public class SumTest {
Java의 정석 제 7 장 객체지향개념 II-3 Java 정석 남궁성 강의
Chapter8 : 인터페이스와 패키지 8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용
Presentation transcript:

객체지향 프로그래밍

3.1.1 객체와 클래스 개념 용어 정리 객체(object) 추상화(abstraction) 클래스(class) 실세계 혹은 인간의 생각 속에 존재하는 사물 혹은 개념 추상화(abstraction) 객체들의 공통된 특성을 파악하고, 불필요한 특성을 제거하는 과정 클래스(class) 추상화를 통해서 객체들의 공통된 사항을 모아놓은 것 멤버 필드(속성) 클래스의 특성 중에서 변수 혹은 값으로 표현할 수 있는 것 메소드(멤버 함수, 행위) 클래스의 특성 중에서 함수로 표현할 수 있는 것 캡슐화(encapsulation) 클래스의 특성을 외부에서 접근하지 못하도록 한 것

3.1.1 객체와 클래스 개념 추상화

3.1.1 객체와 클래스 개념 객체지향 프로그래밍의 장점 생산성 향성 자연적인 모델링 재사용 유지보수의 용이성 객체를 하드웨어의 IC처럼 재사용 자연적인 모델링 보통 사람들의 생각을 프로그래밍 언어로 표현 재사용 상속 및 결합(composition)을 통한 코드 재사용의 극대화 유지보수의 용이성 함수 수정에 있어 주변에 미치는 영향이 최소화됨

3.1.1 객체와 클래스 개념 실세계 객체와 프로그램 세계의 클래스

3.1.1 객체와 클래스 개념 프로그램 세계에서 클래스와 객체 객체 클래스 Object = Data + Methods Object = 클래스의 인스턴스 (an instance of a class) 클래스 Class = 객체의 타입 (description of a type of Object) 프로그램 Program = 서로 협력하는 객체들의 집합 (a set of Objects invoking each other Methods)

3.1.1 객체와 클래스 개념 메시지 패싱

3.1.2 클래스와 객체 만들기 추상화 관점

3.1.2 클래스와 객체 만들기 실세계의 펜과 프로그램 펜의 유사성 공장 만드는 단계 클래스 -> 공장 ,틀, 자료형 클래스 -> 공장 ,틀, 자료형 클래스를 정의할 때 사물(객체, 물건)의 중요하고 필요하다고 판단되는 특성과 기능만 추출해서 표현한다. 물건 만드는 단계 new 라는 명령어를 사용, new 다음에 클래스(공장) 이름과 같은 함수 기술 이 때 만들어진 물건은 변수에 저장되고, 변수의 타입은 물건의 종류가 될 것이다. 예: Pen mypen = new Pen(); 만들어진 물건을 사용 단계 변수에 점(.)을 이용하여 프로그램에서 만들어진 물건을 사용한다. 예: mypen.write();

3.1.2 클래스와 객체 만들기 프로그램에서 클래스를 정의하고 사용하는 단계

3.1.2 클래스와 객체 만들기 예제: Pen.java 예제: PenUser.java 결과 1 class Pen { 2 String color; 3 int price; 4 5 void write() { 6 System.out.println("Hello"); 7 } 8 } 1 class PenUser { 2 public static void main(String args[]) { 3 Pen mypen = new Pen(); 4 mypen.write(); 5 } 6 } 결과 C:\> java PenUser Hello

3.1.3 레퍼런스 타입 레퍼런스와 포인터

3.1.3 레퍼런스 타입 객체 생성 방법(C++ vs. Java)

3.1.3 레퍼런스 타입 메모리 영역 1 int a = 100 ; 2 Car mycar; 3 mycar = new Car(); 4 Car yourcar = mycar;

3.1.3 레퍼런스 타입 ==과 equals() == 연산자와 equals() 메소드의 차이점 두 연산자의 차이점의 예 == 연산자는 두 변수의 값이 같은가를 물어본다 equals() 메소드는 객체의 내용이 같은가를 물어본다. == 연산자는 기본 자료형이나 레퍼런스에 사용 equals() 메소드는 레퍼런스 타입에서만 사용 두 연산자의 차이점의 예

3.1.3 레퍼런스 타입 예제: Equal.java 1 public class Equal { 2 public static void main(String args[]) { 3 String a = new String("abc"); 4 String b = "abc"; 5 String c = b; 6 String d = a; 7 8 StringBuffer e = new StringBuffer("abc"); 9 StringBuffer g = e; 10 11 if(a = = b) { 12 System.out.println("a= =b"); 13 } 14 // if(a = = e) { // 컴파일 에러 15 // System.out.println("a= =e"); 16 // } …………...

3.1.3 레퍼런스 타입 결 과 20 if(b.equals(a)) { 21 System.out.println("b.equals(a)"); 22 } 23 if(b.equals(e)) { 24 System.out.println("b.equals(e)"); ……………... 결 과 C:\> java Equal c==b b.equals(a)

3.2 자바 클래스 자바 클래스 작성 문법 [ classmodifier ] class name [ <typeparameter> ] [ extends name ] [ implements name [ , name ] ] { [[ constructormodifier ] name ( argumentlist ) [ throws name [ , name ] ] { } ] [ fieldmodifier ] type name [ = initialvalue ] ; [ methodmodifier ] [ <typeparameter> ] returntype name ( argumentlist ) [ throws name [ , name ] ] { } }

3.2 자바 클래스 모디파이어 종류

3.2 자바 클래스 예제: Circle.java 1 class Circle { 2 int r; 3 4 public double getCircumference() { 5 return 3.14*2*r; 6 } 7 8 public double getArea() { 9 return 3.14*r*r; 10 } ……

3.2 자바 클래스 예제: CircleUser.java 결과 1 class CircleUser { 2 public static void main(String args[]) { 3 Circle c = new Circle(); 4 c.setRadius(7); 5 System.out.println("원 둘레:"+ c.getCircumference()); 6 System.out.println("원 면적:"+ c.getArea()); …… 결과 C:\> java CircleUser 원 둘레:43.96 원 면적:153.86

3.3.1 생성자 생성자 클래스 이름과 동일한 이름을 갖는 함수 생성자의 리턴 타입은 기술하지 않음 역할 - 멤버 필드의 초기화 생성자가 없는 클래스는 디폴트 생성자를 가지고 있다

3.3.1 생성자 예제: Circle.java 예제: CircleUser.java 1 class Circle { …… 8 public Circle(int r) { 9 this.r = r; 10 } 1 class CircleUser { 2 public static void main(String args[]) { 3 Circle c = new Circle(7); 4 System.out.println("원 둘레:"+ c.getCircumference()); 5 System.out.println("원 면적:"+ c.getArea());

3.3.2 this this 예제 : This.java 클래스 내에서 자기 자신을 가리키는 레퍼런스 static으로 선언된 메소드에서는 사용될 수 없다. 두 가지 목적으로 사용 자기 자신의 멤버 필드나 메소드를 명확히 지시하기 위해서 사용 객체 전체를 함수의 매개변수로 전달해야 하는 경우에 사용 예제 : This.java 9 void a (int a) { 10 this.a = a; 11 b.doJob(this); 12 } 13 }

3.3.3 this() this( ) 예제: Circle3.java 생성자가 많은 경우 매개 변수에 의해 생성자가 구분 생성자에서 this()는 맨 처음 부분에 나와야 한다. 예제: Circle3.java 4 public Circle() { 5 this(0); 6 } 8 public Circle(int r) { 9 this.r = r; 10 }

3.3.5 패키지와 import 패키지(package) 유사한 클래스들의 모임 package 문장 기술 package package_name ; 특징 package 문장을 사용하지 않는 경우에는 디폴트 패키지에 속하게 된다. 패키지 내에서 클래스들은 서로 자유롭게 다른 클래스들을 참조 다른 패키지의 클래스를 사용하기 위해서는 import 문을 사용 import package_name.class_name ; 패키지 경로는 클래스 파일의 디렉토리 경로와 같다. 예) java.awt.Graphics --> java/awt/Graphics import 문장을 사용하지 않고 다른 패키지의 클래스를 참조하기 위해서는 패키지 이름과 클래스 이름을 같이 사용 예) java.awt.Graphics g ;

3.3.5 패키지와 import 예제: ColorPen.java 저장 및 컴파일 저장 컴파일 C:\java2\src\ch3\com\coding_free\java2 컴파일 C:\> javac -d . com/coding_free/java2/ColorPen.java 1 package com.coding_free.java2; 2 3 public class ColorPen { 4 private String color; 5 private int price;

3.3.5 패키지와 import 예제: ColorPenUsre.java 저장, 컴파일 및 실행 저장 : C:\java2\src\ch3\penna 컴파일 : C:\> javac -d . penna/ColorPenUser.java 실행 : C:\> java penna.ColorPenUser 1 package penna; 2 3 import com.coding_free.java2.*; 4 5 class ColorPenUser { 6 public static void main(String args[]) { 7 ColorPen mypen = new ColorPen();

3.3.5 패키지와 import Static import 예제: StaticImportTest.java 형태 예제: StaticImportTest.java import static TypeName.Identifier ; import static TypeName.* ; 1 import static java.lang.System.*; 2 3 public class StaticImportTest { 4 public static void main(String args[]) { 5 out.println("Hello World");

3.4 public 클래스 public 클래스의 의미 public으로 선언된 경우 public으로 선언되지 않은 경우 같은 패키지 내에서 자유롭게 사용. 다른 패키지에서도 자유롭게 사용. public으로 선언되지 않은 경우 같은 패키지 내에서는 자유롭게 사용 다른 패키지에서 접근 시 에러가 발생

3.5 가시성 가시성 가시성 종류 멤버 필드와 메소드에 적용 public protected package private 클래스 내외 어느 곳에서나 접근이 가능 protected 같은 패키지 내에 있는 클래스들은 모두 접근 가능 다른 패키지의 클래스들은 이 클래스로부터 상속받은 경우에만 접근 가능 package 아무 것도 기술하지 않음 같은 패키지 내에서는 자유롭게 접근할 수 있으나, 패키지 외부에서는 접근할 수 없음 private 클래스 내부에서만 접근 가능

접근 수정자 같은 클래스 같은 패키지 서브클래스 모든 클래스 접근 수정자 같은 클래스 같은 패키지 서브클래스 모든 클래스 private package protected public O X

3.5 가시성 동일 패키지 외부 패키지

3.6 transient, volatile 필드 transient 필드 예 멤버필드가 객체의 영속적인 상태에 일부분으로 포함되지 않는다 예 다음의 Point 클래스가 시스템 서비스에 의해 영속적인 메모리에 저장될 때 transient 부분을 제외한 x, y 부분만 저장됨을 의미 class Point { int x, y; transient float rho, theta; }

3.6 transient, volatile 필드 volatile 필드 예 쓰레드 간에 공유되는 데이터의 일관성 유지를 위해 사용 volatile로 선언된 변수는 일관성을 유지하면서 내용이 업데이트 됨 volatile로 선언된 변수의 내용을 변경하는 경우에는 락(lock)이 걸린다고 볼 수 있다. 예 class Test { static volatile int i = 0, j = 0; static void one() { i++; j++; } static void two() { System.out.println("i=" + i + " j=" + j); …

3.7 오버로딩 (overloading) 오버로딩 ad-hoc polymorphism이라고도 함 동일한 연산자가 자료의 타입에 따라 다른 작업을 수행하는 것 함수 오버로딩 동일한 이름을 가지는 함수가 여러 개 존재 가능 내부적으로는 다른 작업을 하더라도 의미 면에서 같다면 동일한 함수 이름을 사용 한 클래스 내에서 함수 이름은 동일, 함수의 매개변수는 달라야 함 함수 시그내쳐 = 함수 이름 + 매개 변수 개수 + 매개 변수 타입

3.7 오버로딩 (overloading) 예제: Overloading.java 1 class Overloading { 2 public void say() { … 6 public void say(String msg) { 10 public void say(String msg, int n) { 16 public static void main(String args[]) { 17 Overloading a = new Overloading(); 18 a.say(); 19 a.say("How are you ?"); 20 a.say("I am fine.", 3);

3.8.1 배열 배열 자바에서 배열은 동적으로 생성할 수 있는 클래스 C 언어와 유사하게 사용 예: new 를 이용해서 생성해야 사용 가능 C 언어와 유사하게 사용 예: int k[ ]; // int 배열을 선언. int[ ] k 와 동일 k = new int[10]; 배열의 인덱스는 0 ~ length - 1까지 사용 배열 초기화 int[] k = {1, 2, 3};

3.8.1 배열 예제: Gauss.java 1 class Gauss { 2 public static void main(String[] args) { 3 int[] ia = new int[101]; 4 for (int i = 0; i < ia.length; i++) 5 ia[i] = i; 6 7 int sum = 0; 8 for (int i = 0; i < ia.length; i++) 9 sum += ia[i]; 10 11 System.out.println(sum);

3.8.1 배열 다차원 배열 예 다차원 배열에서 C 언어와 다른 점 (2차원 배열을 예) 예 : 4 x 5의 격자 모양의 배열 int twoDarray[][]; String threeDarray[][][]; 다차원 배열에서 C 언어와 다른 점 (2차원 배열을 예) C 언어에서는 배열이 격자 모양으로 가로 세로의 크기가 고정 자바에서는 다양한 형태의 배열을 가질 수 있다. 예 : 4 x 5의 격자 모양의 배열 twoDarray = new int[4][5]; 예 : 전체 배열의 크기는 4로 만들고, 배열의 각 컴포넌트는 필요한 경우에 동적으로 크기를 결정 twoDarray = new int[4][];

3.8.1 배열 예제: MultiDarray.java 3 char stars[][]; 4 5 stars = new char[6][]; 6 for(int i=0; i < stars.length; i++) { 7 stars[i] = new char[i+1]; 8 for(int j=0; j < stars[i].length; j++) { 9 stars[i][j] = '*'; 10 } 11 }

3.8.2 레퍼런스와 포인터 레퍼런스와 포인터 차이점