객체 지향 언어 [JAVA]
// JAVA 의 기본단위 == class
//임의로 만든 클래스 , 파일로 만든 클래스는 public이 붙지만 내가 임의로 만든 class는 붙일수 없다.
[ 객체지향 언어 JAVA ]
[ 객체지향 프로그래밍(OOP)의 특성 ]
▶특성 4가지
★ 추상화 // 너무 추상적. 인식하는것에 따라 다 바뀔수 있음
ex ) "자동차" 코딩해줘. 각자 생각하는게 다 다르다
1) 스포츠카 : 속도, 브레이크() 가 중요해
2) 버스 (대중교통을 생각) : 탑승인원수,요금정산()
3) 차: 주유상태 출력(), 벨트(), 네비()
어떻게 정의하느냐에 따라, 서로다른 OUTPUT이 생성될수 있다
그래서 "설계"가 매우 중요하다!
★ 캡슐화 EX )약의 내부구성성분을 몰라도 약의 효과를 알면 먹는다.내부 구성성분을 몰라도, 효과를 알면 우리는 그냥 먹는다.
-> 내부로직코드를 정확히 몰라도, INPUT/ OUTPUT /기능 /활용하는 상황을 알면 사용한다.
PRINTLN , SCANNER, RANDOM
----------------------------------------
기존의 코드들을 분석하여 '모듈화'된 코드들을 가져다가 쓸수있다!
* 오류의 파급효과 줄어듦
* 개발시간단축
* 개발비용절감
* 이익증가
* 유지보수가 용이
★ 상속
부모(상위) 클래스에서 미리 공통부분을 코딩해둔다음,
자식(하위) 클래스에서 '상속'받아 세부적인 부분을 구현
EX ) 함수, 반복문, 캡슐화 ... 등등등
※캡슐화 와의 차이점
캡슐화는 포함관계 X
상속은 포함관계 O ----> "설계" 단계에서 집중적으로 고민하는 부분 !!!
★ 다형성
★일반적으로 흔히 만들수 있는 " 함수에게 주어(주체)가 생기는 생겼기 " 때문에 발생하는 현상 ★
함수: 일반적인 프로그래밍 언어에서 흔히 만들수 있음. 주어 XXX
메서드: 객체지향언어에서만 작성가능 . 주어 O
함수를 실행시키는 주어(주체) == 객체
객체가 실행하는 함수 => 메서드
같은 함수를 실행시켜도, 주어(주체) 따라 다른 기능이 실행되는 현상
EX1) 강아지.울음소리(); -> 멍멍
고양이.울음소리(); -> 야옹
3. "객체지향"으로 넘어오면 '질문'이 바뀐다!
구조적인(설계적인) 부분을 많이 공부해야한다!!
Q) 이거 짝수야?
Q) 3,6,9 게임의 알고리즘을 작성해줘.
Q) 배열에 NUM가 있어?
↓ ( 질문이 구체화 된다 )
Q) 자동차 코딩해줘.
Q) 학생부 프로그램을 제작하고싶어. 학생 데이터 만들어줘.
Q) 스마트폰 코딩해줘.
연습 문제
출처 입력
★ 첫번째 문제
원 객체들을 생성하고싶습니다.
원이란,이름이 있고 반지름이 있다.
원객체야,너 정보좀 출력해줘!
ex) circle.printInfo();
-> ㅁㅁㅁ은 넓이가 ㅁㅁ.ㅁㅁ입니다.
원의 넓이 공식
반지름x반지름x3.14
원 객체 2개 생성하고 상태출력하라 !~~
package class04;
//Point 1. 지역변수 vs 멤버변수
//Point 2. 멤버변수에 대입연산자 사용 xxx
// -> 생성자를 정의하여 해결!
class Circle{ // 원 객체를 생성 해주세요
String name;
int radius;
double PI;
double result;
// 여기는 멤버변수
// 생성자
// 1, input
// 2, output xxxx -> 당연히 객체이기 때문에 안씀
//언제나 객체여서 output안씀
// 3, 생성자함수명 == 클래스명
// ★★★★★★ 생성자의 존재이유 ★★★★★★
// : 멤버변수의 값들을 초기화 하기 위해서 사용함 !!
Circle(String name, int radius){
this.name=name;
this.radius=radius;
this.PI=3.14;
this.result=this.radius*this.radius*this.PI;
System.out.println(this.name+"이(가) 생성완료!");
}
// This
//생성자의 int값이랑 멤버변수의 int 값이랑 맞춰준다.
// 같은 이름이라서 구분이 어려울수 있음
// EX) 왼쪽 옆에 있는 내 a야
// this == 자기 자신의 객체
// 내 생성자 나 자신 내꺼 ! 내가 입력 받을거
// this 를 붙여 왼쪽이 생성자의 변수명으로 구분해준다.
// this.name (생성자 변수명) = name ; (멤버변수)
void printInfo() { // 출력을 위한 메서드
System.out.println(name + "은 넓이가 " + result + "입니다.");
}
}
public class Test03 {
public static void main(String[] args) {
// 생성자가 1개라도 제작하게되면,
// 더이상 기본생성자는 제공되지 않는다 !
Circle a1 = new Circle("홍",10);
Circle a2 = new Circle("길동", 20);
a1.name = "홍"; // 출력전에 상태를 만들어줘야함 !
a1.radius = 10;
a2.name = "길";
a2.radius = 20;
a1.printInfo();
a2.printInfo();
}
}
★ 두번째 문제
책을
업그레이드해주세요
판매량 항목을 추가해주시고
책이 판매가되었다면
판매량을 +=10;
printInfo()했을때, 판매량이 보일수있도록!
책을 한권더 생성
-> ㅁㅁㅁㅁ,ㅁㅁㅁㅁ,100
소스코드를 이렇게 예쁘게 입력할 수 있다는걸 이제 알았다 ....!
앞으로는 소스코드를 예쁘게 해서 올릴 예정 !
이렇게 해서 또 하나 배우는 코딩 어린이 ,, it_Child ,,,
// 클래스
class Book2 {
// 멤버변수
String title;
int price;
int cnt; // 판매량
Book2(String title, int price) {
this.title = title;
this.price = price;
this.cnt = 0; // 입력값이 없으면 0으로 세팅
System.out.println(this.title + " 생성완료!");
}
Book2(String title, int price, int cnt) {
this.title = title;
this.price = price;
this.cnt = cnt;
System.out.println(this.title + " 생성완료!");
}
// 메서드
void printInfo() {
System.out.println(this.title + " 판매량: " + this.cnt);
System.out.println(this.title + " 가격: " + this.price);
}
void sell() { // 판매를 했을때 판매량 += 하기
cnt += 10;
System.out.println(this.title + " 판매완료");
}
}
public class Test04 {
public static void main(String[] args) {
// 객체들
Book2 b1 = new Book2("어린왕자", 7800); // 선언하지않아도 기본적으로 제공되는 생성자
Book2 b2 = new Book2("해리포터", 23000); // 기본(디폴트)생성자 : 인자없음
// 생성자(함수)
// 1. 클래스와 이름이 같고
// 2. 객체를 생성할수있으며
// 3. new 연산자와 함께 사용
b1.printInfo();
b2.printInfo();
Book2 b3 = new Book2("비전공자를 위한 이해할 수 있는 IT지식", 16800, 100);
b3.sell();
b3.printInfo();
}
}