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 |