쉽게 풀어쓴 C 프로그래밍

Similar documents
PowerPoint Presentation

PowerPoint Presentation

PowerPoint Presentation

PowerPoint Presentation

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public

gnu-lee-oop-kor-lec06-3-chap7

JAVA PROGRAMMING 실습 08.다형성

PowerPoint Presentation

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

Microsoft PowerPoint - Lect04.pptx

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

JAVA PROGRAMMING 실습 02. 표준 입출력

Microsoft PowerPoint - 2강

Design Issues

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

PowerPoint 프레젠테이션

Microsoft Word - EEL2 Lab4.docx

JAVA PROGRAMMING 실습 05. 객체의 활용

자바 프로그래밍

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

5장.key

PowerPoint Presentation

No Slide Title

쉽게 풀어쓴 C 프로그래밍

설계란 무엇인가?

Microsoft PowerPoint - Java7.pptx

PowerPoint 프레젠테이션

PowerPoint Presentation

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

07 자바의 다양한 클래스.key

Blog

PowerPoint Presentation

슬라이드 1

PowerPoint 프레젠테이션

제11장 프로세스와 쓰레드

쉽게 풀어쓴 C 프로그래밍

JAVA PROGRAMMING 실습 05. 객체의 활용

PowerPoint Presentation

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

10.0pt1height.7depth.3width±â10.0pt1height.7depth.3widthÃÊ10.0pt1height.7depth.3widthÅë10.0pt1height.7depth.3width°è10.0pt1height.7depth.3widthÇÁ10.0pt1height.7depth.3width·Î10.0pt1height.7depth.3width±×10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width¹Ö pt1height.7depth.3widthŬ10.0pt1height.7depth.3width·¡10.0pt1height.7depth.3width½º, 10.0pt1height.7depth.3width°´10.0pt1height.7depth.3widthü, 10.0pt1height.7depth.3widthº¯10.0pt1height.7depth.3width¼ö, 10.0pt1height.7depth.3width¸Þ10.0pt1height.7depth.3width¼Ò10.0pt1height.7depth.3widthµå

쉽게 풀어쓴 C 프로그래밊

Microsoft PowerPoint - Chapter 6.ppt

쉽게

쉽게 풀어쓴 C 프로그래밊

No Slide Title

01-OOPConcepts(2).PDF

Spring Data JPA Many To Many 양방향 관계 예제

PowerPoint Presentation

C++ Programming

슬라이드 1

C++ Programming

비긴쿡-자바 00앞부속

슬라이드 1

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

PowerPoint Template

PowerPoint 프레젠테이션

PowerPoint Presentation

PowerPoint 프레젠테이션

Java ~ Java program: main() class class» public static void main(string args[])» First.java (main class ) /* The first simple program */ public class

JAVA PROGRAMMING 실습 09. 예외처리

PowerPoint Presentation

PowerPoint Presentation

교육자료

쉽게 풀어쓴 C 프로그래밍

PowerPoint Template

Microsoft PowerPoint 장강의노트.ppt

Spring Boot/JDBC JdbcTemplate/CRUD 예제

class Sale void makelineitem(productspecification* spec, int qty) SalesLineItem* sl = new SalesLineItem(spec, qty); ; 2. 아래의액티비티다이어그램을보고 Java 또는 C ++,

유니티 변수-함수.key

Microsoft PowerPoint - 04-UDP Programming.ppt

<4D F736F F F696E74202D20C1A63234C0E520C0D4C3E2B7C228B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

05-class.key

4 장클래스와객체 클래스와객체 public과 private 구조체와클래스객체의생성과생성자객체의소멸과소멸자생성자와소멸자의호출순서디폴트생성자와디폴트소멸자멤버초기화멤버함수의외부정의멤버함수의인라인함수선언 C++ 프로그래밍입문

02 C h a p t e r Java

Microsoft PowerPoint - additional08.ppt [호환 모드]

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

<4D F736F F F696E74202D20C1A63139C0E520B9E8C4A120B0FCB8AEC0DA28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - additional07.ppt [호환 모드]

1. 클래스와배열 int 형배열선언및초기화 int ary[5] = 1, 2, 3, 4, 5 ; for (int i = 0; i < 5; i++) cout << "ary[" << i << "] = " << ary[i] << endl; 5 장클래스의활용 1

PowerPoint 프레젠테이션

슬라이드 1

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

Microsoft PowerPoint - 13_UMLCoding(2010).pptx

Network Programming

PowerPoint Template

JAVA PROGRAMMING 실습 07. 상속

PowerPoint 프레젠테이션

rmi_박준용_final.PDF

JVM 메모리구조

C++ Programming

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

Microsoft PowerPoint - additional06.ppt [호환 모드]

Transcription:

Power Java 제 9 장생성자와접근제어

이번장에서학습할내용 생성자 정적변수 정적메소드 접근제어 this 클래스간의관계 객체가생성될때초기화를담당하는생성자에대하여살펴봅니다.

생성자 생성자 (contructor): 객체가생성될때에필드에게초기값을제공하고필요한초기화절차를실행하는메소드

생성자의예 class Car { private String color; // 색상 private int speed; // 속도 private int gear; // 기어 // 첫번째생성자 public Car(String c, int s, int g) { color = c; speed = s; gear = g; // 두번째생성자 public Car() { color = "red"; speed = 0; gear = 1;

예제 public class CarTest { public static void main(string args[]) { Car c1 = new Car("blue", 100, 0); // 첫번째생성자호출 Car c2 = new Car(); // 두번째생성자호출

디폴트생성자 만약클래스작성시에생성자를하나도만들지않는경우에는자동적으로메소드의몸체부분이비어있는생성자가만들어진다.

주의할점 생성자가하나라도정의되어있으면디폴트생성자는만들어지지않는다.

생성자에서메소드호출 this() 는생성자를호출한다.

예제 #1 class Date { private int year; private String month; private int day; public Date() { month = "1월"; day = 1; year = 2009; public Date(int year, String month, int day) { setdate(year, month, day); public Date(int year) { setdate(year, "1월", 1); // 디폴트생성자 // 생성자 // 생성자

예제 #1 public void setdate(int year, String month, int day) { this.month = month; // this 는현재객체를가리킨다. this.day = day; this.year = year; public class DateTest { public static void main(string[] args) { Date date1=new Date(2009,"3월 ", 2); // 2009.3.2 Date date2=new Date(2010); // 2010.1.1 Date date3=new Date(); // 2009.1.1

예제 #2 class Time { private int hour; // 0-23 private int minute; // 0-59 private int second; // 0-59 // 첫번째생성자 public Time() { this(0, 0, 0); // 두번째생성자 public Time(int h, int m, int s) { settime(h, m, s); // 시간설정함수 public void settime(int h, int m, int s) { hour = ((h >= 0 && h < 24)? h : 0); // 시간검증 minute = ((m >= 0 && m < 60)? m : 0); // 분검증 second = ((s >= 0 && s < 60)? s : 0); // 초검증

예제 #2 // 시 : 분 : 초 의형식으로출력 public String tostring() { return String.format("%02d:%02d:%02d", hour, minute, second); public class TimeTest { public static void main(string args[]) { // Time 객체를생성하고초기화한다. Time time = new Time(); System.out.print(" 기본생성자호출후시간 : "); System.out.println(time.toString()); // 두번째생성자호출 Time time2 = new Time(13, 27, 6); System.out.print(" 두번째생성자호출후시간 : "); System.out.println(time2.toString());

예제 // 올바르지않은시간으로설정해본다. Time time3 = new Time(99, 66, 77); System.out.print(" 올바르지않은시간설정후시간 : "); System.out.println(time3.toString()); 1 부터 10 까지의정수의합 = 55 기본생성자호출후시간 : 00:00:00 두번째생성자호출후시간 : 13:27:06 올바르지않은시간설정후시간 : 00:00:00

예제 #3 class Point { private int x, y; // 생성자 public Point(int a, int b) x = a; y = b; class Circle { private int radius = 0; private Point center; // Point 참조변수가필드로선언되어있다. // 생성자 public Circle(Point p, int r) { center = p; radius = r;

예제 #3 public class CircleTest { public static void main(string args[]) { // Circle 객체를생성하고초기화한다. Point p = new Point(25, 78); Circle c = new Circle(p, 10);

정적변수 인스턴스변수 (instance variable): 객체마다하나씩있는변수 정적변수 (static variable): 모든객체를통틀어서하나만있는변수

정적변수의예 public class Car { private String color; private int speed; private int gear; private int id; private static int numberofcars = 0; public Car(String c, int s, int g) { color = c; speed = s; gear = g; // 자동차의개수를증가하고 id 번호를할당한다. id = ++numberofcars;

정적변수를외부에서사용할때 클래스이름. 정적변수 형식을사용한다. int n = Car.numberOfCars ;

정적메소드 정적메소드 (static method): 객체를생성하지않고사용할수있는메소드 ( 예 ) Math 클래스에들어있는각종수학메소드들 double value = Math.sqrt(9.0);

정적변수의예 public class Car { private String color; private int speed; private int gear; private int id; private static int numberofcars = 0; public Car(String c, int s, int g) { color = c; speed = s; gear = g; // 자동차의개수를증가하고 id 번호를할당한다. id = ++numberofcars;

예제 // 정적메소드 public static int getnumberofcars() { return numberofcars; // OK! public class CarTest3 { public static void main(string args[]) { Car c1 = new Car("blue", 100, 1); // 첫번째생성자호출 Car c2 = new Car("white", 0, 1); // 첫번째생성자호출 int n = Car.getNumberOfCars(); // 정적메소드호출 System.out.println(" 지금까지생성된자동차수 = " + n); 1 부터 10 까지의정수의합 = 55 지금까지생성된자동차수 = 2

주의할점 public class Test { public static void main(string args[]) { add(10,20); // 오류!! Why? int add(int x, int y) { return x + y; 정적메소스에서인스턴스메소드를호출할수없음. Why?

상수 상수는공간을절약하기위하여정적변수로선언된다. ( 예 ) public class Car {... static final int MAX_SPEED = 350;...

정적변수의예 import java.util.*; class Employee { private String name; private double salary; private static int count = 0; // 정적변수 // 생성자 public Employee(String n, double s) { name = n; salary = s; count++; // 정적변수인 count 를증가 // 객체가소멸될때호출된다. protected void finalize() { count--; // 직원이하나줄어드는것이므로 count 를하나감소

예제 // 정적메소드 public static int getcount() { return count; public class EmployeeTest { public static void main(string[] args) { Employee e1,e2,e3; e1 = new Employee(" 김철수 ", 35000); e2 = new Employee(" 최수철 ", 50000); e3 = new Employee(" 김철호 ", 20000); int n = Employee.getCount(); System.out.println(" 현재의직원수 =" + n); 1 부터 10 까지의정수의합 = 55 현재의직원수 =3

중간점검문제 1. 정적변수는어떤경우에사용하면좋은가? 2. 정적변수나정적메소드를사용할때, 클래스이름을통하여접근하는이유는무엇인가? 3. main() 안에서인스턴스메소드를호출할수없는이유는무엇인가?

접근제어 접근제어 (access control): 다른클래스가특정한필드나메소드에접근하는것을제어하는것

접근제어의종류 클래스수준에서의접근제어 멤버수준에서의접근제어

클래스수준에서의접근제어 public: 다른모든클래스가사용할수있는공용클래스 package: 수식자가없으면 : 같은패키지안에있는클래스들만이사용 패키지 (package) 는관련된클래스를모아둔것 public class myclass { class myclass {

멤버수준에서의접근제어 분류 접근 지정자 클래스 내부 같은 패키지내의 클래스 다른모든 클래스 전용멤버 private O X X 패키지멤 버 없음 O O X 공용멤버 public O O O

예제 import java.util.*; class Employee { private String name; private int salary; int age; // private 로선언 // private 로선언 // package 로선언 // 생성자 public Employee(String n, int a, double s) { name = n; age = a; salary = s; // 직원의이름을반환 public String getname() { return name; private int getsalary() { // private 로선언 return salary;

int getage() { return age; 예제 // package 로선언 public class EmployeeTest { public static void main(string[] args) { Employee e; e = new Employee(" 홍길동 ", 0, 3000); e.salary = 300; // 오류! private 변수 e.age = 26; // 같은패키지이므로 OK int sa = e.getsalary(); // 오류! private 메소드 String s = e.getname(); // OK! int a = e.getage(); // 같은패키지이므로 OK 1 부터 10 까지의정수의합 = 55 Exception in thread "main" java.lang.error: Unresolved compilation problems: The field Employee.salary is not visible The method getsalary() from the type Employee is not visible at EmployeeTest.main(EmployeeTest.java:8)

중간점검문제 1. 필드의경우, private 로만드는것이바람직한이유는무엇인가? 2. 필드를정의할때아무런접근제어수식자를붙이지않으면어떻게되는가?

this 자기자신을참조하는키워드 this.member = 10; 생성자를호출할때도사용된다. this(10, 20);

예제 class Person { private String lastname; private String firstname; String getlastname() { return lastname; String getfirstname() { return firstname; public Person(String lastname, String firstname) { this.lastname = lastname; // this는현재객체를가리킨다. this.firstname = firstname; // this는현재객체를가리킨다.

예제 public String buildname() { return String.format("%s %s\n", this.getlastname(), getfirstname()); public class PersonTest { public static void main(string args[]) { Person person = new Person(" 홍 ", " 길동 "); System.out.println(person.buildName());

중간점검문제 1. this 의주된용도는무엇인가? 2. this() 와같이표기하면무엇을의미하는가??

클래스와클래스간의관계 사용 (use): 하나의클래스가다른클래스를사용한다. 집합 (has-a): 하나의클래스가다른클래스를포함한다. 상속 (is-a): 하나의클래스가다른클래스를상속한다.

사용관계 클래스 A 의메소드에서클래스 B 의메소드들을호출한다. public class Complex { private double real; private double imag; public Complex(double r, double i) { real = r; imag = i;... double getreal() { return real; double getimag() { return imag; public Complex add(complex c) { double resultreal = real + c.getreal(); double resultimag = real + c.getimag(); return new Complex(resultReal, resultimag); 자기자신을사용하는경우

집합관계 하나의객체안에다른객체들이포함 class Time { private int time; private int minute; private int second; public Time(int t, int m, int s) { time = t; minute = m; second = s; public class AlarmClock { private Time currenttime; private Time alarmtime; 다른객체포함 publicalarmclock(time a, Time c) { alarmtime = a; currenttime = c;

Q & A