JAVA/자바 이론 / / 2021. 4. 14. 15:08

Java | 4-1 클래스와 객체

01. 객체지향적 언어의 목적과 특징
02. 클래스 선언과 객체의 생성

02. 클래스 선언과 객체의 생성

03. 메소드와 생성자
04. 메소드 인자 전달 방식
05. 메소드 오버로딩

 

# 객체지향적 언어의 목적

º 소프트웨어 생산성 향상

- 컴퓨터 산업 발전에 따른 소프트웨어의 생명 주기 (life cycle) 단축됨.

- 객체 지향적 언어는 상속, 다형성, 캡슐화 등 소프트웨어 재사용을 위한 여러 장치를 내장하고 있음.

- 소프트웨어의 재사용과 부분 수정을 통해 소프트웨어를 다시 만드는 부담을 대폭 줄임으로써 소프트웨어 생산성을 향상시킴.

º 실세계에 대한 쉬운 모델링

- 과거 : 수학 계산, 통계 처리 등 처리 과정, 계산 절차가 중요

- 현재 : 실세계에서 발생하는 일을 프로그래밍 (->객체지향)

 

# 절차지향적 프로그래밍

º 작업 순서를 표현하는 컴퓨터 명령 집합

º 함수들의 집합으로 프로그램 작성

 

# 객체지향적 프로그래밍

º 프로그램을 실제 세상에 가깝게 모델링

º 컴퓨터가 수행하는 작업을 객체들간의 상호 작용으로 표현

º 클래스 또는 객체들의 집합으로 프로그램 작성

 

# 객체 지향 언어의 특성 : 캡슐화 (Encapsulation)

º 클래스 내에 데이터와 메소드 ( method, 함수)를 정의하고 구현

º 외부에서는 공개된 메소드를 호출하여 해당 객체에 접근

º 객체 내의 데이터에 대한 보안, 보호, 외부 접근 제한 가능

 

# 객체 지향 언어의 특성 : 상속 (Inheritance)

º 상속 : 상위 클래스의 특성을 하위 클래스가 물려받음

- 상위 클래스 : 수퍼 클래스

- 하위 클래스 : 서브 클래스

º 서브 클래스

- 수퍼 클래스 코드의 재사용

- 새로운 특성 추가 가능

º 다중 상속을 지원하지 않음

- 인터페이스를 통해 다중 상속과 같은 효과를 얻음

 

# 객체 지향 언어의 특성 : 다형성 (Polymorphism)

º 같은 메소드 (또는 함수)가 객체에 따라 다른 동작을 수행

º 다형성은 오버라이딩과 밀접한 관계

 

# 클래스와 객체

º 클래스 (class)

- 객체의 공통된 특징을 기숙

- 객체의 특성과 행위를 정의

º 객체 (object)

- 클래스의 인스턴스 (instance, 실체)

- 물리적 공간을 갖는 구체적인 것, 실체

º 사례

- 클래스 : 소나타 자동차     객체 : 출고된 실제 소나타 100대

- 클래스 : 벽시계               객체 : 우리집 벽에 걸린 벽시계들

- 클래스 : 책상                  객체 : 우리가 사용중인 실제 책상들

- 클래스 : Person (이름, 직업, 나이, 성별, ...)    객체 : 김OO, 박OO

 

# 클래스 선언

º 클래스 접근 권한, public

- public 접근 권한은 다른 모든 클래스들이 이 클래스에 접근 가능함을 읨

- 클래스는 {로 시작하여 }로 닫으며 이곳에 모든 멤버 필드와 메소드를 구현

º 필드 (field)

- 값을 저장할 멤버 변수들

- 필드 앞에 붙은 접근 지정자 public은 이 필드가 다른 클래스에서 접근될 수 있도록 공개한다는 의미

º 생성자 (constructor)

- 클래스의 이름과 동일한 메소드

- 클래스의 객체가 생성될 때만 호출되는 메소드

º 메소드 (method)

- 메소드는 함수이며, 객체의 행위를 구현

- 메소드 앞에 붙은 접근 지정자 public은 이 메소드가 다른 클래스에서 접근될 수 있도록 공개한다는 의미

 

# 객체 생성

º 객체 생성

- new 키워드를 이용하여 생성, new는 객체의 생성자를 호출

º 객체 생성 과정

- 객체에 대한 레퍼런스 변수 선언

- 객체 생성

public class PersonDemo1 {
	public static void main(String[] args) {
    	Person aPerson;   //레퍼런스 변수 aPerson 선언
        aPerson = new Person("김OO");   //Person 객체 생성
        aPerson.age = 30;   //객체 멤버 age에 저장
        int i = aPerson.age;   //객체 멤버 age 읽음
        String s = aPerson.getName();   //객체 멤버 메소드 호출
        System.out.println(s);   //s 값 출력
     }
}

ex) 상품 1개를 표현하는 클래스 Goods

pubic class Goods {
	String name;
    int price;
    int numberOfStock;
    int sold;
    
    public static void main(Stringp[] args) {
    	Goods camera = new Goods();
        camera.name = "Nikon";
        camera.price = 4000000;
        camera.nubmberOfStock = 30;
        camera.sold = 50;
        
        System.out.println("상품 이름: " + camera.name);
        System.out.println("상품 가격: " + camera.price);
        System.out.println("재고 수량: " + camera.numerOfStock);
        System.out.println("팔린 수량: " + camera.sold);
    }
}

º 클래스 Goods

- 스트링 1개와 정수 3개 저장

º main( ) 메소드

- Goods 객체 생성 ( 객체 이름, 객체 필드 값)

- 설정된 값을 화며에 출력

 

ex) 차량 연비 계산 프로그램

public class Vehicle {
	public int passengers;   //승객 수
    public int fuelcap;      //개스 탱크 크기
    public int mpg;          //연비
    
    //Vehicle 클래스의 생성자
    public Vehicle (int p, int f, int m) {
    	passenger = p;
        fuelcap = f;
        mpg = m;
    }
    
    //주어진 연료로 주행할 수 있는 거리
    public int range() {
    	return mpg * fuelcap;
    }
    
    //주어진 거리를 주행하기 위한 연료량
    public double fuelneeded(int miles) {
    	return (double) miles / mpg;
    }
}

 

public class VehicleDemo1 {
	public static void main(String[] args) {
    	//construct complete vehicles
        Vehicle minivan = new Vehicle(7, 16, 21);
        Vehicle sportscar = new Vehicle(2, 14, 12);
        double gallons;
        int dist = 252;
        gallons = minivan.fuelneeded(dist);
        System.out.println("To go " + dist + " miles minivan needs " + gallons + " gallons of fuel.");
        gallons = sportscar.fuelneeded(dist);
        System.out.println("To go " + dist + " mies sportscar needs " + gallons + " gallons of fuel.");
    }
}

º 실행 결과

To go 252 miles minivan needs 12.0 gallons of fuel.
To go 252 mies sportscar needs 21.0 gallons of fuel.

 

# 객체 배열 생성 및 사용

Person[] pa;            // 배열에 대한 레퍼런스 선언
pa = new Person[10];    //레퍼런스 배열 생성
for(int i=0; i<pa.length; i++) {   //배열 pa이 모든 원소 객체의 age를 출력한다.
  	pa[i] = new Person();    //배열 원소 객체 생성
  	pa[i].age = 30 + i;      //객체 배열 사용
}

ex) 상품 객체 배열 생성 및 사용

º 상품 (Goods) 클래스 정의

public class Goods {
	private String name;
	private int price;
	private int numberOfStock;
	private int sold;
	
	public Goods(String name, int price, int numberOfStock, int sold) {
		this.name = name;
		this.price = price;
		this.numberOfStock = numberOfStock;
		this.sold = sold;
	}
	public String getName() {return name;}
	public int getPrice() {return price;}
	public int getNumberOfStock() {return numberOfStock;}
	public int getSold() {return sold;}
}

º 상품 (Goods) 객체 3개를 입력받아 배열에 저장하고, 그 값을 출력하시오

import java.util.Scanner;
public class GoodsDemo {
	public static void main(String[] args) {
		Goods [] goodsArray;
		goodsArray = new Goods [3];
		Scanner s = new Scanner(System.in);
		
		for(int i = 0; i<goodsArray.length; i++) {
			String name = s.next();
			int price = s.nextInt();
			int n = s.nextInt();
			int sold = s.nextInt();
			goodsArray[i] = new Goods(name, price, n, sold);
		}
		for(int i = 0; i<goodsArray.length; i++) {
			System.out.print(goodsArray[i].getName() + " ");
			System.out.print(goodsArray[i].getPrice() + " ");
			System.out.print(goodsArray[i].getNumberOfStock() + " ");
			System.out.println(goodsArray[i].getSold() + " ");
		}
	}
}

 

'JAVA > 자바 이론' 카테고리의 다른 글

Java | 4-3 클래스와 객체  (0) 2021.04.15
Java | 4-2 클래스와 객체  (0) 2021.04.14
Java | 3-2 예외 처리  (0) 2021.04.12
Java | 3-1 반복문과 배열  (0) 2021.04.12
Java | 2-2 자바 기본 프로그래밍  (0) 2021.04.11
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유