230315 풀스택 10일차 - 객체와 클래스

황인성·2023년 3월 15일
0

인텔리제이 한글패치(한글팩)
file
setting
plugins
korea 검색
설치

  1. 자료형 => 기본자료형 => 8가지 // 참조자료형 => 기본형을 제외한 모든 자료형 String Array => 자바 정의한 자료형

  2. Class 자동차 {

}
자동차 a자동차 = new 자동차();
new가 실체화 시키는 키워드고
자동차설계도를 써서 실체화를 시켰다

  1. 사칙연산, 조건문, 반복문, 함수 매개변수

  2. 상속 extends

  3. 형변환이나 객체지향적인 관점에서 코드를 짜는게 효율적일 수가 있다.

  4. 생성자함수, 객체지향적인 코드(클래스 안에서 다른 클래스도 실체화 시킬 수 있다)

new 클래스명(); => 객체화, 실체화, 인스턴스화, 설계도 실체화

전사 변수명 = 전사 실체화

자바에선 함수명이 같아요. 근데 매개변수가 달라요?
class 차 {
void 달리다 () {} // 자바는 이 함수들을 각각 다른 함수로 파악함
void 달리다 (a) {} // 자바는 이 함수들을 각각 다른 함수로 파악함
void 달리다 (a, b) {} // 자바는 이 함수들을 각각 다른 함수로 파악함
}

오버로딩 : 함수명은 같아도 매개변수나 구조의 차이에 의해서 다르게 인식되는게 오버로딩.

오버라이딩 : 부모랑 동일한 명의 매서드가 있을때는 자식매서드에서 재정의(덮어쓰기)할 수 있다.

변수가 데이터보다 범위가 커야함
기본형데이터애서
double a = 1; 이 성립되는 이유는 int형보다 double이 다룰 수 있는 범위가 커서임.

class Main {
	public static void main(String[] args) {
		전사 a전사 = new 전사();
		a전사.이름 = "카니";
		
		a전사.나이 = 22;
		
		a전사.a무기 = new();
		
		a전사.공격();
		// 카니가 칼로 공격합니다.
		
		a전사.이름 = "초코";
		
		a전사.a무기 = new();
		
		a전사.공격();
		// 초코가 활로 공격합니다.
	}
}
class 전사 {
	String 이름;
	int 나이;
	무기 a무기;
	void 공격 () {
		a무기.작동(this.이름); // 이해안됨
	}
}
abstract class 무기 { // 부모클래스의 스킬을쓰면 각 자식클래스의 상황에 맞게 형변환을 한다.
	abstract void 작동 (String 이름); // 작동리모컨 이해안됨
}
classextends 무기{
	void 작동 (String 이름) {
		System.out.println(이름 + "가 칼로 공격합니다.");
	}
}
classextends 무기{
	void 작동 (String 이름) {
		System.out.println(이름 + "가 활로 공격합니다.");
	}
}

위 코드는 자바 프로그래밍 언어로 작성된 예제 코드입니다.
이 코드는 '전사' 클래스와 '무기' 클래스를 포함합니다. '전사' 클래스는 이름, 나이, 무기를 가지며, '공격' 메서드를 통해 무기를 작동시켜 공격합니다. '무기' 클래스는 추상 클래스로, '작동' 메서드를 가지며, 자식 클래스에서 이를 구현합니다. 자식 클래스로는 '칼' 클래스와 '활' 클래스가 있으며, 각각 '작동' 메서드를 구현합니다.
'전사' 클래스의 '공격' 메서드에서는 현재 전사가 가지고 있는 무기를 이용해 작동 메서드를 호출합니다. 이때, 자식 클래스에서 구현한 '작동' 메서드가 실행되어 각 무기에 맞게 공격 메시지를 출력합니다.
예제 코드에서는 '전사' 클래스의 객체를 생성하고, 이 객체의 이름과 나이를 설정하고, 무기를 할당한 후에 '공격' 메서드를 호출합니다. 이때, 무기에 따라 출력되는 공격 메시지가 다릅니다. 첫 번째 호출에서는 칼을 이용해 공격하며, 두 번째 호출에서는 활을 이용해 공격합니다.

class Main {
	public static void main(String[] args) {
		사람 a사람 = new 사람();
		a사람.달리기_속력 = 20;
		a사람.달리다();
		// 사람이 20km/h로 달립니다.
		a사람.달리다();
		// 사람이 20km/h로 달립니다.
		
		a사람.달리기_속력 = 50;
		a사람.달리다();
		// 사람이 50km/h로 달립니다.
	}
}
class 사람 {
	int 달리기_속력;
	void 달리다 () {
		System.out.println("사람이 " + 달리기_속력 + "km/h로 달립니다");
	}
}
class Main {
	public static void main(String[] args) {
		// 아래가 실행되도록 해주세요.
		사람 a사람 = new 사람();
		
		a사람.나이 = 20;
		a사람.a왼팔 = new(); // new 팔();의 타입은 class 팔이기 때문에 
		
	}
}
class 사람 {
	// 클래스 안에 변수를 정의할 수 있다.
	int 나이; // 20이 정수이기 때문에 int를 썼고
	팔 a왼팔; // 왼팔을 팔에 넣고싶으면 왼팔의 타입은 팔이어야함
}
class{
	
}
class Main {
	public static void main(String[] args) {
		전사 a전사 = new 전사();
		
		a전사.나이 = 20;
		a전사.a무기 = new(); // a무기라는 이름으로 활을 받고
		a전사.a무기 = new(); // a무기라는 이름으로 칼을 받음
	}
}
class 전사 {
	int 나이;
	// 만약 활만 있었으면 무기클래스를 따로 만들어주지 않고 그냥 활타입으로 a무기를 받아주면 되지만
	무기 a무기; // 활과 칼을 둘다 받기 위해서 무기클래스를 만들어서 무기타입으로 a무기를 받아줌.
}
class 무기 {
	
}
classextends 무기{

}
classextends 무기{
	
}
// 문제 : 아래가 실행되도록 해주세요.
class Main {
	public static void main(String[] args) {
		전사 a전사 = new 전사();
		String 이름 = "칸";
		a전사.이름 = 이름;
		a전사.나이 = 20;
		a전사.자기소개(); // 안녕하세요. 저는 20살 칸 입니다.
		
		a전사.나이++;
		a전사.자기소개(); // 안녕하세요. 저는 21살 칸 입니다.
		
		a전사.나이 = 30;
		a전사.이름 = "카니";
		a전사.자기소개(); // 안녕하세요. 저는 30살 카니 입니다.
		
		a전사.a무기 = new(); // 활 클래스를 지칭
		a전사.공격(); // void 공격 메서드를 호출
		// 출력 : 카니가 활로 공격합니다.
		
		a전사.a무기 = new(); // 칼 클래스를 지칭
		a전사.공격(); // void 공격 메서드를 호출
		// 출력 : 카니가 칼로 공격합니다.
	}
}
class 전사 {
	// 인스턴스 변수
	String 이름;
	// 인스턴스 변수
	int 나이;
	// 인스턴스 변수
	무기 a무기;
	void 자기소개() {
		System.out.println("안녕하세요. 저는 " + this.나이 + "살 " + this.이름 + " 입니다.");
	}
	void 공격 () {
		a무기.작동(this.이름); // a무기에는 활클래스와 칼클래스가 담겨있다.
	}
}
abstract class 무기 {
	abstract void 작동 (String 이름); // abstract를 이용해서 작동 메서드의 껍데기만 넣어줌
}
classextends 무기 { // 무기를 상속
	void 작동 (String 이름) {
		System.out.println(이름 + "가 칼로 공격합니다.");
	}
}
classextends 무기 { // 무기를 상속
	void 작동 (String 이름) {
		System.out.println(이름 + "가 활로 공격합니다.");
	}
}

매개변수를 사용하지 않고 코드 짜보기

// 문제 : 아래가 실행되도록 해주세요.
// 조건 : 매개변수를 사용하지 말아주세요.
class Main {
	public static void main(String[] args) {
		전사 a전사 = new 전사();
		String 이름 = "칸";
		a전사.이름 = 이름;
		a전사.나이 = 20;
		a전사.자기소개();
		a전사.나이++;
		a전사.자기소개();
		a전사.나이 = 30;
		a전사.이름 = "카니";
		a전사.자기소개();
		a전사.a무기 = new();
		a전사.공격();
		// 출력 : 카니가 활로 공격합니다.
		a전사.a무기 = new();
		a전사.공격();
		// 출력 : 카니가 칼로 공격합니다.
	}
}

class 전사 {
	// 인스턴스 변수
	String 이름;
	// 인스턴스 변수
	int 나이;
	// 인스턴스 변수
	무기 a무기;
	void 자기소개() {
		System.out.println("안녕하세요. 저는 " + this.나이 + "살 " + this.이름 + " 입니다.");
	}
	void 공격 () {
		a무기.사용자이름 = this.이름;
        a무기.작동();
	}
}

class 무기 {
	String 사용자이름;
	void 작동 () {
	}
}
classextends 무기 {
	void 작동 () {
		System.out.println(this.사용자이름 + "가 활로 공격합니다.");
	}
}
classextends 무기 {
	void 작동 () {
		System.out.println(this.사용자이름 + "가 칼로 공격합니다.");
	}
}
profile
문제 해결을 위해 끊임없이 파고드는 걸 좋아합니다.

0개의 댓글