728x90
728x90

 

 

 

 

 

 

 

명품자바프로그래밍 1장 요약, 예제

명품자바프로그래밍 2장 요약, 예제

명품자바프로그래밍 3장 요약, 예제

 

 


 

 

명품자바프로그래밍 4장 요약

 

 

클래스와 객체

 

객체 지향 언어의 특징 3가지

 

캡슐화 : 클래스라는 캡슐을 사용하며 필드(멤버변수)와 메소드(멤버함수)로 구성된다.

상속 : 자식클래스(sub class)가 부모 클래스(super class)의 속성을 물려받아 사용하고 기능을 추가(extends) 하는 것.

다형성 : 같은 이름의 메소드가 클래스나 객체에 따라 다르게 동작하도록 구현되는 것.

- overriding 오버라이딩 : 슈퍼클래스를 서브클래스에서 동일한 이름으로 자신의 특징에 맞게 재구현하는 것

- overloading 오버로딩 : 클래스 내에서 이름이 같지만 서로 다르게 동작하는 메소드를 여러개 만드는 것

 

 

객체 지향 언어의 목적

 

소프트웨어의 생산성 향상, 실세계에 대한 쉬운 모델링

객체 : 클래스 모양대로 생성된 실체. 클래스의 인스턴스 instance. 사례

클래스 : 객체를 만들기 위한 설계도.

멤버 : 클래스의 구성 요소. 필드와 메소드 두 종류가 있다.

필드 : 객체 내 값을 저장할 멤버 변수

메소드 : 함수이며 객체의 행동을 구현

 

 

접근 지정자 access specifier

 

접근의 범위 지정. public, private, protected, default.

 

 

생성자 constructor

 

- new를 통해 객체가 생성될 때 자동으로 한번만 호출.

- 객체 초기화를 위해 실행되는 클래스의 이름과 동일한 메소드.

- 오버로딩 : 매개변수의 개수와 타입만 다르다면 클래스 내에 생성자를 여러 개 둘 수 있다.

- 리턴 타입을 지정할 수 없다. public Circle() {...} (x) void(x) return;(0)

 

 

디폴트 생성자 default constructor 

 

매개변수와 실행코드가 없어 아무 일도 하지 않고 단순리턴하는 생성자

 

* 객체가 생성될 때 반드시 실행되기에 생성자가 없는 클래스는 없다.

-> 생성자가 하나도 없으면 컴파일러가 생성자를 자동 생성하여 컴파일러 오류가 호출되지 않음

* 생성자가 하나라도 존재하면 기본생성자가 자동으로 삽입되지 않음

-> 컴파일오류 발생

 

class Circle{
    public Circle(){}  //기본생성자(디폴트생성자). 단순 리턴만 함
}

 

 

 

레퍼런스 변수 선언 : null로 초기화된다.

Circle 타입 크기의 메모리 할당 -> Circle() 생성자 코드 실행

Circle pizza=new Circle();

 

Circle pizza;   //레퍼런스를 가지는 변수일 뿐 아직 객체가 생성된 것이 아니다. 
pizza=new Circle();  //객체 생성은 new 연산자를 사용해서 객체를 생성한다.

 

 

객체 멤버 접근 : 레퍼런스 변수 뒤 점 연산자를 붙인다.

 

pizza.radius=10;   //pizza 객체의 radius 필드에 10 대입
int r=pizza.radius; //pizza 객체의 radius 필드값 읽을 때

 

 

 

this 레퍼런스 : 객체 자신을 가리키는 레퍼런스. 메소드에서 사용되며 현재 실행되고 있는 메소드가 속한 객체에 대한 참조로 컴파일러에 의해 자동 관리된다. static에서는 사용될 수 없다.

 

public Circle(int radius) {this.radius=radius;}  
                            // 멤버,     매개변수
public Circle getMe() {return this;} //객체 자신의 레퍼런스 리턴

 

 

 

this() : 클래스 내에서 생성자가 다른 생성자를 호출할 때 사용되는 자바코드.

반드시 생성자 코드에서만 호출, 같은 클래스 내 다른 생성자 호출 시 사용, 생성자의 첫 번째 문장

 

 

 

객체 배열 : 기본 타입 데이터 외 객체에 대한 레퍼런스를 원소로 갖는 배열

 

Circle[] c;    //배열에 대한 레퍼런스 선언
c=new Circle[5];    //Circle 객체에 대한 레퍼런스 생성
for(int i=0; i<c.length; i++)    //c.length는 배열 c의 크기(5)  
   c[i]=new Circle(i);    //i번째 Circle 객체 생성

 

 

 

 

명품자바프로그래밍 클래스와 객체 4장 예제

 

| 예제 4-1 | 반지름과 이름을 가진 Circle 클래스를 작성하고, Circle 클래스의 객체를 생성하라. 그리고 객체가 생성된 모습을 그려보라.

 

* No enclosing instance of type ... is accessible 컴파일 오류 : 보통 내부에 있는 클래스를 static 함수를 참조할 때 에러
>> 자바피자의 면적은 314.0, 등킨드나쓰의 면적은 12.56

 

package Luxuryjava04;

	public class Circle {
    
		int radius;   //원의 반지름필드 
		String name;  //원의 이름필드 

		public Circle() { }  //생성
        
		public double getArea() {
			return 3.14*radius*radius;
		}

	public static void main(String[] args) {
    
		Circle pizza; //참조변수 피자 선언 
        
		pizza=new Circle(); //원 객체 생성 
		pizza.radius=10; //피자 반지름 설정 
        
		pizza.name="자바피자"; // 피자 이름설정 
		double area=pizza.getArea(); //피자 면적알기 
        
		System.out.println(pizza.name+"의면적은"+area);
		
		Circle donut=new Circle(); //원 객체 생성 
        
		donut.radius=2; //도넛 반지름 설정
		donut.name="등킨드나쓰"; //도넛 이름설정
        
		area=donut.getArea();  //도넛 면적알기
        
		System.out.println(donut.name+"의면적은"+area);			
	}
}

 

 

 

 

| 예제 4-2 | 너비와 높이를 입력받아 사각형의 합을 출력하는 프로그램을 작성하라. 너비와 높이 필드, 그리고 면적 값을 제공하는 getArea() 메소드를 가진 Rectangle 클래스를 만들어 활용하라. *객체는 new 연산자로 생성하고, .쩜 연산자로 멤버를 접근한다.

 

>> 4 5

사각형의 면적은 20

 

package Luxuryjava04;

import java.util.Scanner;

class Rectangle{

	int width, height;
    
	public int getArea() {
    
		return width*height;
	}
}
public class RectApp {

	public static void main(String[] args) {
    
		Rectangle rect=new Rectangle();  //객체 생성
        
		Scanner s=new Scanner(System.in);
		System.out.print(">>");
        
		rect.width=s.nextInt();
		rect.height=s.nextInt();
        
		System.out.println("사각형의 면적은 "+rect.getArea());
        
		s.close();
	}
}

 

 

 

 

| 예제 4-3 | 다음 코드는 2개의 생성자를 가진 CircleA 클래스다. 실행 결과는?

 

>> javapizza의 면적은 314.0

oraclepizza의 면적은 3.14

 

package Luxuryjava04;

public class CircleA {
	int radius;
	String name;
    //생성자는 클래스 이름과 동일 
    
	public CircleA() { //매개변수 없는 생성자 
		radius=1; name="";  // field 초기화 
	}
	//생성자는 리턴타입 없음 
    
	public CircleA(int r, String n) {  //매개변수를 가진 생성자 
		radius=r; name=n; //매개변수로 필드 초기화 
	}
	public double getArea() {
		return 3.14*radius*radius;
	}
	
	public static void main(String[] args) {
    
		CircleA pizza=new CircleA(10, "javapizza"); 
		//객체 생성,반지름과 이름 초기화
        
		double area=pizza.getArea();
        
		System.out.println(pizza.name+"의 면적은 "+area);
		
		CircleA donut=new CircleA(); //객체 생성,반지름과 이름 초기화
		donut.name="oraclepizza";  //이름변경
        
		area=donut.getArea();
        
		System.out.println(donut.name+"의 면적은 "+area);
	}
}

 

 

 

 

| 예제 4-4 | 제목과 저자를 나타내는 title과 author필드를 가진 Book 클래스를 작성하고, 생성자를 작성하여 필드를 초기화하라.

 

>> 어린왕자 생텍쥐페리

춘향뎐 작자미상

 

package Luxuryjava04;

public class Book {
	String title, author;
	
	public Book(String t) {  //생성자로 오버로딩. 
		title=t;
		author="작자미상";
	}
	public Book(String t, String a) { //생성자로 오버로딩. 매개변수의 개수가 다름.
		title=t;
		author=a;
	}
	
	public static void main(String[] args) {
    
		Book littlePrince=new Book("어린왕자", "생텍쥐페리");
		Book llovestory=new Book("춘향뎐");
        
		System.out.println(littlePrince.title+" "+littlePrince.author);
		System.out.println(llovestory.title+" "+llovestory.author);
	}
}

 

 

 

 

| 예제 4-5 | 4-4에서 작성한 Book클래스의 생성자를 this()를 이용하여 수정하라. 

 

>> 생성자 호출됨

춘향뎐 작자미상

 

package Luxuryjava04;

public class Book {
	String title, author;
	
	void show() {
		System.out.println(title+" "+author);
	}
	
	public Book() {
		this("","");
		System.out.println("생성자 호출됨");
	}
	
	public Book(String title) {   
		this(title,"작자미상");
	}
	public Book(String title, String author) { 
		this.title=title;
		this.author=author;
	}
	
	public static void main(String[] args) {
    
		Book littlePrince=new Book("어린왕자", "생텍쥐페리");
		Book llovestory=new Book("춘향뎐");
        
		Book emptyBook=new Book();
		llovestory.show();
	}
}

 

 

 

 

 

728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,

v