# 왜생겼나요..? : 절차지향언어가가진단점을보완하고다음의목적을달성하기위해..! 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(); k x y 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 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); 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;
생성자도오버로딩이가능하다.
기본생성자 class DefaultConstructor{ int x; public void setx(int x) {this.x = x; public int getx() {return x; public DefaultConstructor() { public static void main(string [] args) { DefaultConstructor p= new DefaultConstructor(); p.setx(3); 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" author = "Anonymous" ISBN = 1 title = "Holy Bible" 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 생성자추가 상자의이름을설정하는생성자추가 상자의동작추가, 변경 상자의이름을설정하는메소드 상자의각속성을주어진값으로설정하는메소드 각속성별개별로설정 부피를계산하여반환해주는메소드 상자의정보반환시상자의이름을반환하도록메소드수정
실행결과