Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
#왜생겼나요..?
: 절차지향언어가가진단점을보완하고다음의목적을달성하기위해 ..!
1. 소프트웨어생산성향상
객체지향소프트웨어를새로만드는경우이미만든개체지향소프트웨어를상속받거나객체를
가져다재사용할수있어부분수정을통해소프트웨어를다시만드는부담줄임.
2. 실세계에대한쉬운모델링
실세계의일은절차나과정보다는일과관련된많은물체들의상호작용으로묘사.
캡슐화
메소드와데이터를클래스내에선언하고구현
외부에서는공개된메소드의인터페이스만접근가능
▪ 외부에서는비공개데이터에직접접근하거나메소드세부구현을알수없음.
객체내데이터에대한보안, 보호,외부접근제한
상속
다형성
생물
동물 식물
사람어류 나무 풀
동물
상속
“멍멍!” “야옹!” “꼬꼬댁!”
부모
소리내기
클래스와객체에대해정확히알자 !!
클래스(class)
사용자가정의하는자료형
필드(데이터) + 메소드(객체가할수있는동작(행동))으로정의
@클래스형식
class 클래스이름{
필드 선언; // 데이터메소드 정의; //동작(행동)
}
@ 클래스 정의 예)
class Person {
public String name; public int age;
public Person(){
}
public Person(String s){name = s;
}
public String getName(){retrun name;
}}
클래스이름
필드(field)
생성자(constructor)
생성자(constructor)
메소드(method)
객체 : 클래스의 인스턴스(instance)
@ 객체 생성(new 연산자)Complex k = new Complex();
kxy
getRear(){..}getImaginary(){…}setValue(…){…}
필드 접근
객체명.필드명
ex) k.x = 5.0;
메소드 호출
객체명.메소드명
ex) k.setValue(1.5,2.0);
생성자의정의와호출
클래스이름과같은이름을가지는메소드
객체에필요한초기화를수행하는작업을함
new연산자를통해객체를생성할때만호출
리턴타입을지정할수없음
class Complex {double x;double y;
Complex() {x = 10.0;y = 20.0;
}
// 메소드 정의}
오버로딩이란 ?
객체지향의특징중, 다형성의한종류임
한클래스내에같은이름의메소드를여러번구현
반드시메소드이름은같아야함
매개변수(인자)의타입이다르거나개수가달라야함
오버로딩을사용하는이유는메소드의이름을절약할수있다.
public class MethodSample {public int getSum(int i, int j) {
return i + j;}
public int getSum(int i, int j, int k) {return i + j + k;
}
public double getSum(double i, double j) {
return i + j;}
}
public static void main (String args[]) {MethodSample a = new
MethodSample();
int i = a.getSum(1, 2);
int j = a.getSum(1, 2, 3);
double k = a.getSum(1.1, 2.2);
}
생성자도오버로딩이가능하다.
class DefaultConstructor{int x;public void setX(int x) {this.x = x;}public int getX() {return x;}
public static void main(String [] args) {DefaultConstructor p= new DefaultConstructor();p.setX(3);
}}
public DefaultConstructor() { }
기본 생성자
class DefaultConstructor{int x;public void setX(int x) {this.x = x;}public int getX() {return x;}
public DefaultConstructor(int x) {this.x = x;
}public static void main(String [] args) {
DefaultConstructor p1= new DefaultConstructor(3);
int n = p1.getX();
DefaultConstructor p2= new DefaultConstructor();
p2.setX(5);}
}
this 란 ?
현재객체자기자신을가리킴
▪ 자기자신에대한레퍼런스
▪ 같은클래스내에서클래스멤버, 변수를접근할때객체이름없으면 묵시적으로this로가정
this의필요성
객체의멤버변수와메소드변수의이름이같은경우
객체자신을메소드에전달또는반환할때
class Samp {int id;
public Samp(int id) {this.id = id;
}public int get() {
return id;}
Public static void main(String[] args){Samp ob1 = new Samp(3);
}
클래스멤버와메소드변수이름이같은경우
생성자가중복된다른생성자를호출
this() 같은 클래스의
다른 생성자 호출
생성자 내에서만 사용 가능 다른 메소드에서는사용 불가
반드시 생성자 코드의 제일 처음에 수행
public class Book {String title;String author;int ISBN;
public Book(String title, String author, int ISBN) {this.title = title;this.author = author;this.ISBN = ISBN;}public Book(String title, int ISBN) {
this(title, "Anonymous", ISBN);}public Book() {
this(null, null, 0); System.out.println("생성자가 호출되었음");
}public static void main(String [] args) {
Book javaBook = new Book("Java JDK", "황기태", 3333);
Book holyBible = new Book("Holy Bible", 1); Book emptyBook = new Book();
}}
title = "Holy Bible"ISBN = 1
title = "Holy Bible"author = "Anonymous"ISBN = 1
접근한정자
클래스사이에접근할수있는권한을제어
1. 클래스접근한정자 : public, default
2. 필드접근한정자 : public, protected, private
3. 메소드접근한정자 : public, protected, private
구분 자기클래스 서브클래스 같은 패키지 모든 클래스
private ○
Packege(default)
○ ○
protected ○ ○ ○
public ○ ○ ○ ○
다음 소스를 컴파일 한 후 오류가 난 이유를 설명하시오!!
class Sample {public int a;private int b;int c;
}
public class AccessEx {public static void main(String[] args) {
Sample aClass = new Sample();aClass.a = 10;aClass.b = 10;aClass.c = 10;
}}
Sample 클래스의 a와 c는 각각 public, default 지정자로 선언이 되었으므로, 같은 패키지에 속한 AccessEx 클래스에서접근 가능
b는 private으로 선언이 되었으므로AccessEx 클래스에서 접근 불가능
Song 클래스의속성정의
노래제목 : title
가수 : artist
노래가속한앨범제목 : album
노래가발표된연도 : year
노래가속한앨범에서의트랙번호 : track
기본생성자만들기
모든필드를초기화하는생성자만들기
노래정보를출력하는메소드만들기
노래제목 : 좋은날
가수 : 아이유
앨범 : Real
년도 : 2010
트랙번호 : 3
Box 클래스
속성 : 넓이, 높이, 깊이, 색상
메소드
▪ 상자의크기를설정하는메소드
▪ 상자의색상을설정하는메소드
▪ 상자의각속성을반환하는메소드
▪ 상자의정보를반환하는메소드
속성정의 : 클래스가가지는데이터(필드)
메소드정의 : 속성값설정( 변경자메소드 )
메소드정의 : 속성값얻어오기( 접근자메소드)
생성자
상자정보반환 : toString ()객체가가지고있는정보나값들을문자열만들어리턴하는메소드
객체의생성및사용
상자의속성추가
상자의이름 : name
생성자추가
상자의이름을설정하는생성자추가
상자의동작추가,변경
상자의이름을설정하는메소드
상자의각속성을주어진값으로설정하는메소드
각속성별개별로설정
부피를계산하여반환해주는메소드
상자의정보반환시상자의이름을반환하도록메소드수정
실행결과