JAVA/개념정리

객체 지향 언어 [JAVA]

Itchild 2024. 4. 6. 14:18
728x90
반응형

 

// 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();

	}
}
 

 

 

728x90
반응형