객체지향 언어와 클래스, 객체 ㅎㅎ 개요 클래스의 선언, 객체의 생성 및 속성 참조 방식 멤버 변수 메소드 한빛미디어(주)

Slides:



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

명품 JAVA Programming 제 3 장 반복문, 배열, 예외처리.
어서와 Java는 처음이지! 제3장선택과 반복.
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
10. 예외 처리.
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
객체지향 프로그래밍.
Chap05 상속 5.1 상속의 개요 5.2 멤버 변수의 상속 5.3 메소드의 상속과 오버라이딩(Overriding)
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
7장 배열 ②.
Java Presentation 중간 시험2 풀이
자바란 무엇인가? JDK의 다운로드 및 설치 방법 Hello, Java 프로그램의 작성 자바 프로그램의 작동 원리
윤 홍 란 제3장 클래스와 객체의 사용-1 윤 홍 란
2주 실습강의 Java의 기본문법(1) 인공지능연구실.
Chapter 02 자바 기본구조 자바 프로그래밍의 기초적인 문법을 소개
제7장 제어구조 I – 식과 문장.
명품 JAVA Essential.
명품 JAVA Programming.
Java RMI (Remote Method Invocation)
명품 JAVA Programming 제 4 장 클래스와 객체.
[INA470] Java Programming Youn-Hee Han
10장 객체-지향 프로그래밍 II ©창병모.
JAVA 프로그래밍 6장 객체지향프로그래밍의 핵심.
Power Java 제10장 배열.
자바 5.0 프로그래밍.
명품 JAVA Essential.
명품 Java Programming.
10장 다중 스레드 10.1 스레드 개요 10.2 Thread 클래스 10.3 스레드 생성
2장 자바환경과 자바 프로그램 2.1 자바 개발 환경 2.2 자바 통합환경 2.3 자바 응용 프로그램과 애플릿 프로그램
7장 클래스.
윤 홍 란 4 장 클래스 작성 윤 홍 란
2010학년도 2학기 객체지향의 이해.
인터페이스(Interfaces) 강원대학교.
김 정 석 Web Programming 김 정 석
자바 프로그래밍 기초 5장. 객체 지향 언어와 클래스, 객체 hanbitbook.co.kr.
주소록 프로그램.
2009학년도 1학기 상지대학교 컴퓨터정보공학부 고 광 만
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
Java 8장. 상속 public class SumTest {
어서와 Java는 처음이지! 제9장 인터페이스, 패키지.
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
WAP Java Seminar
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
메소드와 클래스 정의 및 문제 풀이 Method and Class Define and Problem Solve
C# 09장. 상속성.
Web programming Chap 04 상속 김 정 석
제 2장 어휘구조와 자료형 토 큰 리 터 럴 주 석 자 료 형 배 열 형.
Java Chapter 4 ~ 주차.
컴퓨터공학실습(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.
Spring DI 이해 및 활용.
자바 5.0 프로그래밍.
Chapter 4 변수 및 바인딩.
Chapter 02. 소프트웨어와 자료구조.
Java 3장. 자바의 기본 구조 I : 변수, 자료형, 연산자 public class SumTest {
[ 단원 06 ] 상속과 다형성.
JVM의 구조와 메모리 모델 JVM의 내부 구조 클래스 파일 클래스 로더 메소드(method) 영역 힙(heap) 영역
3장,4장 발표 서정우.
Java RMI (Remote Method Invocation)
6장 클래스(상속).
Java 5장. 객체지향 개념 public class SumTest {
캡슐화 (Encapsulation) 두원공과대학 소프트웨어개발과 이 원 주.
C# 09장. 클래스와 객체.
Java의 정석 제 7 장 객체지향개념 II-3 Java 정석 남궁성 강의
C++ 언어의 특징
1. 객체-지향 프로그래밍.
Chapter8 : 인터페이스와 패키지 8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용
Presentation transcript:

객체지향 언어와 클래스, 객체 ㅎㅎ 개요 클래스의 선언, 객체의 생성 및 속성 참조 방식 멤버 변수 메소드 한빛미디어(주)

학습목표 5장. 객체지향 언어와 클래스, 객체 클래스의 선언, 객체의 생성 및 속성 참조 방식 등에 대해서 학습한다. 멤버 변수는 크게 객체 변수, 클래스 변수 및 종단 변수로 구분하며, 이러한 구분들에 대해서 학습한다. 객체를 실행시키는 명령, 즉 객체와 외부 세계를 연결하는 인터페이스(Interface)로 객체의 메소드에 대해서 학습한다.

객체와 클래스의 개념 객체의 이벤트 객체 객체(Object)란 객체의 이벤트(Event)란 현실 세계에 존재하는 특정 대상을 표현하는 것 기능이 유사한 것끼리 모아놓은 집합체 예) 컴퓨터, 자동차, 학생 웹에서의 객체 예: 작업 대상, 즉 구성요소를 표현하는 문자, 그림, 동영상, 표, 프레임, 윈도우 및 문서 등 객체는 특성을 의미하는 속성(Property)과 실행 명령인 메소드(Method)로 구성 클래스(Class)는 객체의 속성과 메소드를 정의하고 표현하는 방식 객체의 이벤트 객체의 이벤트(Event)란 사용자가 외부 세계의 특정 부분을 조작하면 컴퓨터로부터 발생되는 일종의 신호 예) 마우스 버튼을 더블 클릭하는 행위, 하이퍼텍스트를 위한 링크 위에 마우스를 클릭하는 행위, 사용자가 키보드 등을 누르거나 놓는 행위, 커서를 이동시키는 행위 등  

객체의 속성 객체의 메소드 Section 01 개요(2/2) 객체가 갖고 있는 기본적인 특성 예) 컴퓨터의 규격, 크기, 색상 및 제조회사 등 웹에서 객체의 속성: 문자에서는 문자(폰트)의 크기, 색깔 등이며 웹 페이지에서는 전경색, 배경색 등을 의미. 객체의 메소드 객체를 실행시키는 명령 객체와 외부 세계를 연결해주는 인터페이스(Interface) 예) ‘아이콘 위에서 마우스 왼쪽 버튼을 누르면 윈도우가 화면에 표시된다.’에서 ‘아이콘’은 객체 며, ‘왼쪽 버튼을 누른다’는 행위는 이벤트가 발생하며, ‘윈도우가 화면에 표시되는 행위’는 메소드

클래스는 객체지향 언어에서는 기본형과 구별되는 새로운 데이터형이라고 인식한다. 각 객체는 데이터의 상태를 저장한다. 클래스/인스턴스/객체 클래스는 객체를 생성하기 위한 틀이다. 클래스는 객체의 행동과 특성을 규정짓는다. 클래스는 객체지향 언어에서는 기본형과 구별되는 새로운 데이터형이라고 인식한다. 각 객체는 데이터의 상태를 저장한다. 클래스로부터 생성된 객체는 클래스의 인스턴스라고 한다

객체 객체 설계와 이용 단계 클래스 설계 클래스 정의 객체 생성 객체 사용

Section 02 클래스의 선언, 객체의 생성 및 속성 참조 방식 (1/2) 클래스의 선언 및 정의 클래스는 클래스의 선언을 이용해 표현 클래스의 선언을 위한 일반 형식 클래스명의 첫 자는 통상적으로 대문자를 사용 저장시 클래스 명은 파일 명과 동일하게 [클래스 접근한정자] class 클래스명 [extends 슈퍼클래스명]                              [implements 인터페이스명] {  ... [필드 접근한정자] 멤버 변수; --속성값 저장 ... [생성자 접근한정자][생성자]; [메소드 접근한정자] 메소드; --동작(기능)을 표현 }

클래스 정의 규칙 클래스 정의 객체는 정의된 클래스로부터 생성된다. 클래스는 java 확장자를 갖는 자바 소소 파일에서 정의한다. 자바 소스 파일은 반드시 하나 이상의 클래스를 정의해야 한다. 자바 소스 파일은 단 하나의 public 클래스만을 정의할 수 있다. 이때, 자바 소스 파일명은 public 클래스의 이름과 동일해야 한다.

Section 02 클래스의 선언, 객체의 생성 및 속성 참조 방식 (2/2) 객체의 정의 및 생성 객체의 생성은 new 연산자를 이용해 다음과 같이 표현 빵 틀을 사용해 붕어빵을 제조하는 과정과 유사 클래스명 객체명;  객체 정의 객체명 = new 클래스명( );  객체 생성 또는  클래스명 객체명 = new 클래스명( ); 객체 내의 속성 참조 객체 내 속성 참조는 .를 이용해 표현 객체명.멤버변수명 객체의 소멸 자바는 자동적으로 쓰레기(Garbage)를 수집 소멸자 불필요

[실습하기 5-1] 자바의 객체 생성 및 속성 참조 (1/5) 클래스를 정의하고 클래스로부터 객체를 생성한 후 객체를 이용하여 학번, 성명, 점수를 출력하는 프로그램 작성

[실습하기 5-1] 자바의 객체 생성 및 속성 참조 (2/5) 01  class Sungjuk_5_1 { 02     String hakbun; 03     String name; 04     int jumsu; 05  } 06  07  class Jv_5_1 { 08   public static void main(String[] args) { 09     Sungjuk_5_1 ken_sung = new Sungjuk_5_1(); 10     ken_sung.hakbun = "2060001"; 11     ken_sung.name = "Ko Eung-Nam"; 12     ken_sung.jumsu = 60; 13     Sungjuk_5_1 wife_sung = new Sungjuk_5_1(); 14     wife_sung.hakbun = "2060002"; 15     wife_sung.name = "Boo Chag-Mi"; 16     wife_sung.jumsu = 80; 17     Sungjuk_5_1 yoo_sung = new Sungjuk_5_1(); 18     yoo_sung.hakbun = "2060003"; 19     yoo_sung.name = "Ko Yoo-Jin"; 20     yoo_sung.jumsu = 100; Jv_5_1.java

[실습하기 5-1] 자바의 객체 생성 및 속성 참조 (3/5) 21    Sungjuk_5_1 soo_sung = new Sungjuk_5_1(); 22    soo_sung.hakbun = "2060004"; 23    soo_sung.name = "Ko Su-Ji"; 24    soo_sung.jumsu = 99; 25    System.out.println("****** 자바의 객체 생성 및 속성 사용 *****"); 26    System.out.println("*** 자바의 성적 출력 ***"); 27    System.out.println("**학번** **성명** **점수**"); 28    System.out.println("---------------------------"); 29    System.out.println(ken_sung.hakbun + " " + ken_sung.name + " " + ken_sung.jumsu); 30    System.out.println(wife_sung.hakbun + " " + wife_sung.name + " " + wife_sung.jumsu); 31    System.out.println(yoo_sung.hakbun + " " + yoo_sung.name + " " + yoo_sung.jumsu); 32    System.out.println(soo_sung.hakbun + " " + soo_sung.name + " " + soo_sung.jumsu); 33   } 34  } Jv_5_1.java

변수의 종류 변수 종류 설명 메모리 영역 객체(멤버) 변수 public또는 private 등으로 정의되는 일반적인 변수, 보통 객체 속성으로 사용 힙 (heap) 클래스 변수 static으로 정의되어 클래스의 모든 객체가 공유하는 변수 객체를 생성하지 않고, 클래스의 이름으로 바로 접근 가능한 변수 정적 메모리 (static) 지역 변수 메소드 내부에서 정의된 변수이다 스택 (stack) 종단변수 (상수형변수) 변하지 않는 상수값

변수의 종류

멤버 변수의 개념 (Member Variable) Section 03 멤버 변수 (1/2) 멤버 변수의 개념 (Member Variable) 클래스 선언 시에 클래스 내에 메소드의 바깥 부분에 선언되는 변수 객체의 속성을 표현하는데 사용 멤버 변수의 종류 객체 변수, 클래스 변수 및 종단 변수로 구분 객체 변수는 객체 속성 변수와 객체 참조 변수로 구분 • 객체 속성 변수: 기본 자료형 변수들로 선언되며 기본 값들이 저장 • 객체 참조 변수: 변수에 객체가 저장된 기억 장소의 주소가 저장 객체 변수의 참조시 일반 형식 객체명.객체변수;

클래스 변수 종단(상수형) 변수 Section 03 멤버 변수 (2/2) 클래스의 모든 객체가 공유할 수 있는 변수 클래스의 모든 객체가 공유할 수 있는 변수 일명 static 변수라고도하며 한정자 static을 앞에 선언 클래스 변수의 참조시 일반  형식은 다음과 같다. 클래스명.클래스변수; 종단(상수형) 변수 상수 값을 정의하는 변수, 한번 선언되어 초기화되면 값을 변경할 수 없다. 변수 앞에 final이라는 한정자를 사용하며 통상적으로 대문자를 사용 종단 변수의 일반 형식은 다음과 같다. final 데이터형 종단변수명 = 상수값;

접근자 키워드 접근 범위 public 모든 클래스 및 객체 protected 서브 클래스, 해당 클래스의 객체 private 해당 클래스로부터 생성된 객체의 메소드 생략 같은 패키지 내부의 클래스로부터 생성된 객체

접근자 같은 디렉토리 다른 object3 public method1() protected method2() private method3() method4() public int var1; protected var2; private var3; var4; object2 object1

[실습하기 5-2] 클래스 변수 (1/5) 클래스를 정의하고 클래스로부터 객체를 생성한 후 객체 내의 메소드를 이용하여 4명의 학번, 성명, 점수를 출력하는 프로그램 작성, 마지막에 클래스 전체 접근회수를 출력

[실습하기 5-2] 클래스 변수 (2/5) 01 class Sungjuk_5_2 { 02     String hakbun;  멤버변수 03     String name; 04     int jumsu; 05     int c_cnt; 06     static int class_cnt = 0;  클래스변수 07   public Sungjuk_5_2() {  메서드 08     c_cnt = class_cnt++;  09   } 10  } 11  12  class Jv_5_2 { 13   public static void main(String[] args) { 14     Sungjuk_5_2 ken_sung = new Sungjuk_5_2(); 15     ken_sung.hakbun = "2060001"; 16     ken_sung.name = "Ko  Eung-Nam"; 17     ken_sung.jumsu = 60; 18     Sungjuk_5_2 wife_sung = new Sungjuk_5_2(); 19     wife_sung.hakbun = "2060002"; 20     wife_sung.name = "Boo  Chag-Mi"; 21     wife_sung.jumsu = 80; Jv_5_2.java

[실습하기 5-2] 클래스 변수 (3/5) 22 Sungjuk_5_2 yoo_sung = new Sungjuk_5_2(); 23     yoo_sung.hakbun = "2060003"; 24     yoo_sung.name = "Ko   Yoo-Jin"; 25     yoo_sung.jumsu = 100; 26     Sungjuk_5_2 soo_sung = new Sungjuk_5_2(); 27     soo_sung.hakbun = "2060004"; 28     soo_sung.name = "Ko     Su-Ji"; 29     soo_sung.jumsu = 99; 30     System.out.println("****** 멤버변수 *****"); 31     System.out.println("*** 자바의 성적 출력 ***"); 32     System.out.println("**학번** **성명** **점수** **항목ID**"); 33     System.out.println("---------------------------------"); 34     System.out.println(ken_sung.hakbun  + "  " + ken_sung.name + "  " + ken_sung.jumsu + "  " + ken_sung.c_cnt); 35     System.out.println(wife_sung.hakbun + "  " + wife_sung.name + "  " + wife_sung.jumsu + "  " + wife_sung.c_cnt); 36     System.out.println(yoo_sung.hakbun  + "  " + yoo_sung.name + "  " + yoo_sung.jumsu + "  " + yoo_sung.c_cnt); 37     System.out.println(soo_sung.hakbun  + "  " + soo_sung.name + "  " + soo_sung.jumsu + "  " + soo_sung.c_cnt); 38     System.out.println("---------------------------------"); 39     System.out.println("클래스 전체 접근 갯수: " + Sungjuk_5_2. class_cnt); 40   } 41  } Jv_5_2.java

메소드의 개념 객체 내의 메소드 선언 메소드의 참조 Section 04 메소드 (1/8) 객체를 실행시키는 명령(함수) 객체와 외부 세계를 연결해주는 인터페이스(interface) 객체 내의 메소드 선언 [접근한정자] 반환데이터형 메소드명 (매개변수1, ... , 매개변수n) {   ... } 메소드의 참조 객체명.메소드명(매개변수1, ... , 매개변수n);

[실습하기 5-3] 자바의 생성 및 객체 내에서의 메소드를 사용 (1/4) 메서드(title)를 이용하여 출력하는 프로그램

[실습하기 5-3] 자바의 생성 및 객체 내에서의 메소드를 사용 (2/4) 01  class Sungjuk_5_3 { 02  String hakbun; 03  String name; 04  int jumsu; 05  void title() { 06    System.out.println("****** 자바의 객체 생성 및 속성 사용 *****"); 07    System.out.println("*** 자바의 성적 출력 ***"); 08    System.out.println("**학번** **성명** **점수**"); 09    System.out.println("---------------------------"); 10   } 11  } 12  13  class Jv_5_3 { 14   public static void main(String[] args) { 15  Sungjuk_5_3 ken_sung = new Sungjuk_5_3(); 16  ken_sung.hakbun = "2060001"; 17  ken_sung.name = "Ko Eung-Nam"; 18  ken_sung.jumsu = 60; Jv_5_3.java

[실습하기 5-3] 자바의 생성 및 객체 내에서의 메소드를 사용 (3/4) 19  Sungjuk_5_3 wife_sung = new Sungjuk_5_3(); 20  wife_sung.hakbun = "2060002"; 21  wife_sung.name = "Boo Chag-Mi"; 22  wife_sung.jumsu = 80; 23  Sungjuk_5_3 yoo_sung = new Sungjuk_5_3(); 24  yoo_sung.hakbun = "2060003"; 25  yoo_sung.name = "Ko Yoo-Jin"; 26  yoo_sung.jumsu = 100; 27  Sungjuk_5_3 soo_sung = new Sungjuk_5_3(); 28  soo_sung.hakbun = "2060004"; 29  soo_sung.name = "Ko Su-Ji"; 30  soo_sung.jumsu = 99; 31  Sungjuk_5_3 ttt = new Sungjuk_5_3(); 32  ttt.title(); 33  System.out.println(ken_sung.hakbun + "  " + ken_sung.name + " " + ken_sung.jumsu); 34  System.out.println(wife_sung.hakbun + "  " + wife_sung.name + " " + wife_sung.jumsu); 35  System.out.println(yoo_sung.hakbun + "  " + yoo_sung.name + " " + yoo_sung.jumsu); 36  System.out.println(soo_sung.hakbun + "  " + soo_sung.name + " " + soo_sung.jumsu); 37   } 38  } Jv_5_3.java

매개변수 전달 방법 Section 04 메소드 (2/8) 메소드의 호출 과정에서 메소드 간에 전달되는 데이터를 저장하기 위한 변수를  매개변수(parameter) 또는 인수(argument)라고 함 매개 변수의 전달 방법. • call-by-value 방식 : 실인수의 값을 가인수에 전달만 해주고 가인수의 변화된 값이 실인수에 영향을 주지 못하는 방식, 복사의 의미 • call-by-address(call-by-reference) 방식 : 실인수의 주소값을 가인수에 전달 해주고 가인수의 변화된 값이 실인수에 영향을 주는 방식 return문은 피호출 메소드에서 호출 메소드로 2개 이상의 값을 되돌려주지 못함. 이러한 작업을 가능하게하는 방식이 call-by-address임

[실습하기 5-4] call-by-value 방식 (1/3) 2개 정수 x=20,y =50 값을 메소드 sw1()을 이용하여 서로 교환하고 결과값을 출력

[실습하기 5-4] call-by-value 방식 (2/3) 01  public class Jv_5_4 { 02     public static void sw1(int x,  int y) { 03          int temp; 04          temp = x; 05          x = y; 06          y = temp; 07          System.out.println("sw1 x =" + x + ", new y = " + y); 08     } 09  10     public static void main(String[] args) { 11         System.out.println("***** call-by-value *****"); 12          int x = 20; 13          int y = 50;    14          System.out.println("old x =" + x + ", old y = " + y); 15          sw1(x, y); 16          System.out.println("new x =" + x + ", new y = " + y); 17    } 18  } Jv_5_4.java

[실습하기 5-5] call-by-address 방식 (1/4) 2개 정수 x=20,y =50 값을 메소드 sw2()을 이용하여 서로 교환하고 결과값을 출력

[실습하기 5-5] call-by-address 방식 (2/4) 01  class Sw2 { 02     public int x, y; 03     public static void sw2(Sw2 boo) {  04          int temp; 05          temp = boo.x; 06          boo.x = boo.y; 07          boo.y = temp; 08          System.out.println("sw2 x =" + boo.x + ", new y = " + boo.y); 09     } 10  } 11  12  class Jv_5_5 { 13     public static void main(String[] args) { 14         System.out.println("***** call-by-address *****"); 15          Sw2 ken = new Sw2(); 16          ken.x = 20; 17          ken.y = 50;    18          System.out.println("old x =" + ken.x + ", old y = " + ken.y); 19          Sw2.sw2(ken); 20          System.out.println("new x =" + ken.x + ", new y = " 21    } 22  } Jv_5_5.java

특수한 메소드: main() 메소드 Section 04 메소드 (3/8) 자바 애플리케이션 실행은 main() 메소드부터 시작 반드시 접근 한정자 중에서 public을 사용하고, static, 반환값이 없는 void를 main 앞에 사용 매개변수는 String[] args를 사용  프로그램에 인수를 전달 프로그램 실행시 명령어 라인(command line)에 입력된 인수를 전달 명령어 라인의 구분자는 공백(blank) 문자 main() 메소드의 일반 형식 public static void main(String[] args) { ...... }

[실습하기 5-6] main() 메소드 (1/3) 프로그램 실행시 입력한 매개변수(학번, 이름)를 포함해서 출력하는 프로그램

[실습하기 5-6] main() 메소드 (2/3) 01 class Jv_5_6 { 02   public static void main(String[] args) { 03     System.out.print("***** main() 메소드 *****"); 04     System.out.print("\n\n"); 05     System.out.print("명령 라인의 전체 문자열: "); 06     for ( int i = 0; i < args.length; i++) 07          System.out.print(args[i] + " "); 08     System.out.print("\n\n"); 09     System.out.println("명령 라인의 전체 문자열 수:"                         + args.length + "\n\n"); 10     for ( int i = 0; i < args.length; i++) 11          System.out.println("매개변수 args[" + i + "] = " + args[i]);    } 12  } Jv_5_6.java

메소드의 반환값 Section 04 메소드 (4/8) ‘반환 데이터형’은 메소드를 실행한 후에 반환되는 값에 대한 데이터 형을 앞에 지정 반환 데이터형: int, float, String 등을 반환할 수 있고, 참조 데이터형인 객체명도 반환 가능 반환되는 값(return value)이 없는 경우에는 void를 사용 형식 [접근한정자] 반환데이터형 메소드명 (매개변수1, ... , 매개변수n) {   ... }

메소드의 오버로딩 (overloading) Section 04 메소드 (5/8) 메소드의 오버로딩 (overloading) 하나의 같은 클래스 내에서 같은 이름을 가진 다수의 메소드가 존재 가능한 것을 의미  오버로딩된 메소드들은 매개 변수의 데이터형, 또는 개수가 반드시 달라야 한다. 동일한 클래스이든 상위 클래스이든 메소드 앞에 static으로 정의된 정적 메소드가 아니면 오버로딩 가능. 즉, static으로 정의된 정적 메소드는 오버로딩시킬 수  없다. 메소드의 오버로딩은 객체지향에서의 다형성(polymorpism) 개념을 적용하고 있다. 객체명.메소드명(매개변수1, ... , 매개변수n);

[실습하기 5-8] 메소드의 오버로딩 (1/5) 같은 이름의 메소드명을 호출, 실행하는 프로그램 public void sub() public void sub(int a, int b) public float sub(float m, float n)

[실습하기 5-8] 메소드의 오버로딩 (2/5) 01 class Jv_5_8_1 { 02 public void sub() 03     { 04       System.out.println("--- no argument ---"); 05       System.out.println("Welcome to JAVA!"); 06       System.out.println("JAVA is very fun!\n"); 07     } 08  09    public void sub(int a, int b) 10     { 11       int c; 12       c = a+b; 13       System.out.println("--- argument & no return ---"); 14       System.out.println(a + "+" + b + "=" + c + "\n"); 15     } 16  17    public float sub(float m, float n) 18     { 19       float k; 20       k = m+n; 21       System.out.println("--- argument & return ---"); 22       System.out.println(m + "+" + n + "=" + k); Jv_5_8.java

[실습하기 5-8] 메소드의 오버로딩 (3/5) 23 return k; 24 } 25 } 26 27 class Jv_5_8 { 24     } 25  } 26  27  class Jv_5_8 { 28   public static void main(String[] args) { 29     int x, y; 30     float c, d, w, z; 31  32     Jv_5_8_1 ken = new Jv_5_8_1();  33     System.out.println("***** method overloading(메소드 중첩) *****"); 34  35     ken.sub(); 36  37     x=30; 38     y=50; 39     ken.sub(x,y); 40  41     c=30; 42     d=50; 43     w = ken.sub(c, d); 44     z=w+100; Jv_5_8.java

[실습하기 5-8] 메소드의 오버로딩 (4/5) 45     System.out.println("sub(c, d)=" + w + ", z=" + z); 46   } 47  } Jv_5_8.java

특수한 메소드: 생성자 (constructor) Section 04 메소드 (6/8) 특수한 메소드: 생성자 (constructor) 클래스에서 객체를 생성할 때 객체를 초기화하는 특수한 메소드 생성자는 클래스명과 동일한 이름을 사용 특수한 메소드이기 때문에 실행 후에 반환값(return value)이 없음 생성자의 사용은 클래스 내의 객체 변수들을 초기화시키고자 할 때 사용 명시적으로 생성자를 호출하지 않고 new 연산자를 사용해 객체가 생성될 때 자동적으로 호출, 실행됨 this 예약어 • this는 현재 사용 중인 자기 자신의 객체를 의미 • this를 사용하는 경우는 일반적으로 생성자나 메소드의 매개변 수가 클래스 내의 객체 변수명과 동일한 이름을 사용하는 경우 에 사용됨

생성자 호출과정 public class Person { public int …. }

객체 생성과정

객체 생성과정 객체 생성과정 1.메모리 할당: 클래스에서 사전에 지정된 데이터 크기만큼 메모리가 힙에 할당된다. 인스턴스 변수들은 각 변수의 데이터형에 따라 초기화된다. 2.명시적인 초기화: 초기화 값을 지정한 변수들이 차례대로 초기화가 된다. 3.생성자 호출: 생성자가 수행되고 변수들의 값은 생성자 내부에서 초기화가 진행된다. 4.생성이 완료된 객체의 참조값을 리턴한다. 보통 할당 연산자를 통해서 참조 변수에 저장된다.

생성자 오버로딩 Section 04 메소드 (7/8) 생성자의 오버로딩 • 메소드의 오버로딩처럼 하나의 같은 클래스 내에서 같은 이름을 가진 다수의 생성자가 존재 가능한 것을 의미 • 오버로딩된 생성자들은 매개 변수의 데이터형, 또는 개수가 반드시 달라야 함 • 동일한 클래스이든 상위 클래스이든 생성자 앞에 static으로 정의된 정적 메소드가 아니면 오버로딩 가능

[실습하기 5-9] 생성자의 오버로딩 (1/6) 생성자 오버로딩 실습 프로그램

[실습하기 5-9] 생성자의 오버로딩 (2/6) 01 class Sungjuk_5_9 { 02 String hakbun; 03  String name; 04  int jumsu; 05   void title() { 06    System.out.println("****** 자바의 생성자(constructor) 사용 *****"); 07    System.out.println("*** 자바의 성적 출력 ***"); 08    System.out.println("**학번** **성명** **점수**"); 09    System.out.println("---------------------------"); 10   } 11   public Sungjuk_5_9() { 12    hakbun = "2060001"; 13    name = "Ko Eung-Nam"; 14    jumsu = 60; 15   } 16   public Sungjuk_5_9(String cons_hakbun) { 17    hakbun = cons_hakbun; 18    name = "Boo Chag-Mi"; 19    jumsu = 80; 20   } 21   public Sungjuk_5_9(String cons_hakbun, String cons_name) { 22    hakbun = cons_hakbun; Jv_5_9.java

[실습하기 5-9] 생성자의 오버로딩 (3/6) 23 name = cons_name; 24 jumsu = 100; 25 } 25   } 26   public Sungjuk_5_9(String hakbun, String name, int jumsu) { 27    this.hakbun = hakbun; 28    this.name = name; 29    this.jumsu = jumsu; 30   } 31  } 32  33  class Jv_5_9 { 34   public static void main(String[] args) { 35  Sungjuk_5_9 ken_sung = new Sungjuk_5_9(); 36  Sungjuk_5_9 wife_sung = new Sungjuk_5_9("2060002"); 37  Sungjuk_5_9 yoo_sung = new Sungjuk_5_9("2060003","Ko Yoo-Jin"); 38  Sungjuk_5_9 soo_sung = new Sungjuk_5_9("2060004","Ko Su-Ji", 99); 39  Sungjuk_5_9 ttt = new Sungjuk_5_9(); 40  ttt.title(); 41  System.out.println(ken_sung.hakbun + "  " + ken_sung.name + " "                      + ken_sung.jumsu); 42  System.out.println(wife_sung.hakbun + "  " + wife_sung.name + " " + wife_sung.jumsu); Jv_5_9.java

[실습하기 5-9] 생성자의 오버로딩 (4/6) 43  System.out.println(yoo_sung.hakbun + "  " + yoo_sung.name + " " + yoo_sung.jumsu); 44  System.out.println(soo_sung.hakbun + "  " + soo_sung.name + " " + soo_sung.jumsu); 45   } 46  } Jv_5_9.java

Section 04 메소드 (8/8) 메소드의 종류 메소드의 종류는 객체 메소드, 클래스 메소드, 종단 메소드, 추상 메소드 및 동기 메소드 등으로 구분 객체 메소드: 객체 메소드란 객체를 통하여 접근 가능한 메소드며 통상적인 메소드 클래스 메소드 - 일명 static 메소드라고도 하며 클래스의 모든 객체가 공유할 수 있는 메소드. 객체생성 없이 사용 - 한정자 static을 앞에다 사용해 선언 - 참조시 ‘객체명’이 아니라 ‘클래스명’으로 참조 종단 메소드 - 서브클래스에서 오버라이딩(overriding)될 수가 없는 메소드 - 클래스를 상속할 때 재정의가 불가능한 메소드 추상 (abstract) - 추상 클래스 안에서만 선언 가능하며 선언 부분만 가지고 있으며 몸체부분은 가질 수 없는 메소드 동기 메소드 : 스레드를 동기화 가능한 기법을 제공하는 메소드