Java 객체

stan·2023년 5월 10일
0

Java 개념

목록 보기
15/33

day06

4가지 (전부다 설계단계에서 고려 하는 것들)

a) 추상화
	ex) "자동차" 코딩해줘. (rough하게 부탁을 했더니:)
	 1) 스포츠카: 속도, 브레이크()
	 2) 버스: 탑승인원, 요금정산()
	 3) 차: 주유상태출력(), 벨트(), 네비게이션()
	어떻게 정의하느냐에 따라, 서로다른 OUTPUT이 생성될수있다.
	그래서 "설계"가 매우 중요하다!

b) 캡슐화(모듈화, 컴포넌트화)
	내부구성성분을 몰라도, 효과를 알면 우리는 그냥 먹는다. 
	내부로직코드를 정확히 몰라도, INPUT OUTPUT 기능 활용하는 상황 등을 알면 그냥 쓴다!
	-------------------------------------------------
	기존의 코드들을 분석하여 '모듈화'된 코드들을 가져다가 쓸수있다!
	오류의 파급효과 줄어듦
	개발시간단축
	개발비용절감
	이익 증가
	유지보수 용이 

c) 상속
	부모(상위) 클래스에서 미리 공통부분을 코딩 해둔다음, 
	자식(하위) 클래스에서 '상속' 받아 세부적인 부분을 구현한다!
	오류의 파급효과 줄어듦
	개발시간단축
	개발비용절감
	이익 증가
	유지보수 용이 
	※ 캡슐화와의 차이점
	캡슐화 : 포함관계가 아님 (다른 알약을 조사해서 필요한 기능을 뜯어옴)
	상속 : 포함관계임 (모든 강아지들은 주민 부모클래스에 속함) ---->>> "설계"단계에서 집중적으로 고민하는 부분!		

d) ★★★★ 다형성 Polymorphism ★★★★ : 
	" 함수에게 주어(주체)가 생겼기 " 때문에 발생하는 현상
	함수: 일반적인 프로그래밍언어에서 흔히 만들수있음. 주어(주체)가 없음 (C는 이 함수를 실행하는 주어가 없음)
	메서드: 객체지향언어에서만 작성가능. 주어가 있는것이 특징. 
		함수를 실행시키는 주어(주체) == 객체
		객체가 실행하는 함수 => 메서드 
	같은 함수를 실행시켜도, 주어(주체)에 따라 다른 기능이 실행되는 현상
	ex1) 강아지.울음소리(); -> 멍멍
	     고양이.울음소리(); -> 야옹
	ex2) 우리정글.공격(); -> 10 dmg
	     상대정글.공격(); -> 200 dmg
         
         

원래 우리가 클래스를 불러와서 썼을때

String, Random, Scanner

		Scanner sc= new Scanner(System.in);
		String str = new String("apple");
		String str2="apple";
		String b="banana";
		String c="kiwi";

객체 생성 :

클래스 객체 =new 생성자();

클래스가 붕어빵을 만들 틀이라면 객체는 틀로 만든 붕어빵의 역할을 함 (변수의 역할)
영어로는 생성되는 객체들을 instance라고도 함

   package class04;

import java.util.Scanner;

// JAVA의 기본단위 == class

// '학생' 코딩 해줘 ==>>학생이라는 기본단위를 만들어야 하는 것 (클래스는 무조건 대문자로 이름붙임)
class Student2{ // 대문자로 시작하는 것은 클래스
	String name;
	int score;
	// 상태 : 멤버변수(혹은 필드, 속성, 프로퍼티, 어트리뷰트)라고 불리수 있음
// ==========================================================================
// ===============================↓생성자 오버로딩===============================
	Student2(String name) {
		this.name=name;
		this.score=0; //아직 전학생이라 시험을 안봤기때문에
		System.out.println(name+"학생 출석부에 입력완료!");
	}
	
	Student2(String name, int score) {
		this.name=name;
		this.score=score;
		System.out.println(name+"학생 출석부에 생성완료");
	}
// ===============================↑생성자 오버로딩===============================
// ==========================================================================
	// static == "객체와 무관하게"
	void hello() { // 객체와 관련이 있기 때문에 static 붙이지 않음
		System.out.println("안녕, 난 "+this.name+"야. " +this.score+"점"); //<<name변수 함수안에서 선언안해도 에러가 안남. 멤버변수 활용 할 수 있음. 
	}
	// 동장(기능) : 메서드, 멤버함수 
	// 메서드는 함수에게 주어(주체)가 생긴것! 그래서 메인에서 주어가 없으면 못써요
	
}


public class Test01B { //<=클래스파일을 생성 했을때 생성된 클래스 
	public static void main(String[] args) { // 학생 / 피카츄 라는 애들 데리고 있어야 함수 호출 가능

		
		
		Student2 student1 = new Student2("아무무",97); //원시타입이 아니므로 클래스류이니까 new 사용
		// 클래스   객체   =new 생성자();
		// 클래스는 자료형, 붕어빵틀의 역할; Student라는 일종의 새로운 타입을 만든것
		// 객체는 변수, 붕어빵의 역할 
		// 클래스로부터 객체를 생성할 때에는 
		// new 생성자()가 반드시 필요하며
		// 객체화(인스턴스화) 영어로는 생성되는 객체들을 instance라고 함 
		// 교재, 유튜브, 인강, 블로그 -> "인스턴스" new해서 나온 객체
		Student2 student2 = new Student2("티모"); //클래스 하나를 장 정의하면 여러객체(?)를 만들 수 있다
		Student2 student3 = new Student2("아리");
		
		// . 멤버접근 연산자
//		student1.name="아무무";
//		student1.score=97;
//		student2.name="티모";
//		student2.score=13;
//		student3.name="아리";
//		student3.score=56;
//		
		//주어가 있으니 인제 메소드임
		//주어가 다르다 보니 다르게 나옴 
		student1.hello();
		student2.hello();
		student3.hello();
		
//		System.out.println(student1); // 주소값이 다 다름
//		System.out.println(student2); // new : 힙메모리를 사용하기 때문에 각각 다른 주소값이 생성
//		System.out.println(student3);
		
		
		
	}
}

package class04;

class Book2 {
	// 멤버변수(속성,상태)값으로 :
	String title;
	int price;
	
	Book2(String t, int p) {
		title=t;
		price=p;
		System.out.println(title+ " 생성완료!");
	}
	
	
	// 메서드(기능, 동작)
	void printInfo() {
		System.out.println(title+"은(는) " + price+ "원입니다.");
	}
	
}

public class Test02B {
	public static void main(String[] args) {
		
		// 객체들 (객체를 사용하려면 생성자(함수) 선언 해야함)그 객체를 사용하려면 생성자가 있어야 한다는 것. 그래서 자바가 기본생성자 준다고~
		Book2 b1 = new Book2("어린왕자",7800); // 선언하지않아도 기본적으로 제공되는 생성자 (자바 : Book클래스가 만들어졌네? 객체를 쓰겠지? ==>>기본생성자만들어줄겡)
		Book2 b2 = new Book2("해리포터",23000); // 기본(디폴트)생성자 : 인자없음
					//생성자(함수) : 1) 클래스와 이름이 같고 2) 객체를 생성할 수 있으며 3) new 연산자와 함께 사용
//		b1.title="어린왕자";
//		b1.price=7800;
		b1.printInfo();// 15~23번 라인까지 함수는 총 4개
						// 함수 1개
						//메서드 1개
						//생성자 2개
		
		b2.printInfo();
		
		
	}
}

객체를 사용하려면 생성자 필요 !

클래스를 불러와서 객체를 생성할때 인수가 없으면 기본 생성자를 제공 해 준다

profile
이진 입니다

0개의 댓글

관련 채용 정보