230313 풀스택 8일차 -

황인성·2023년 3월 13일
0

다음카카오 취업하신 분이 수업을 들어왔을 때 코드몽키를 시켰는데 한문제를 3일을 고민하더라 그런식으로 풀다가 자바 과정을 들어왔을때 백준풀때도 똑같이 하던데 그런 사람들이 회사도 잘 가고 적응도 잘 하더라
집중력을 요하는 직업이다보니 그런 훈련을 잘 해야된다
코딩을 하기위해서 절차적 사고가 될 수 있게 뇌구조가 바뀌어야함
고민하다 힘들어서 두통약까지 먹을정도로 고민하다보면 뇌의 시냅스 구조가 그 방향으로 효율적이게 바뀐다

프로그래머스 풀기
단계별로 한문제 이상씩 풀기
푼다는게 중요한게 아니고 고민하는게 중요함

문제풀이 역량이 된다는 분들은 알고리즘을 하면 된다

지난시간

기본형
int, boolean, char, byte, long, float, double이 있다

참조형
기본형을 제외한 모든 것
String

참조형같은경우는 힙이랑 스택영역이 있는데 기본형같은경우 스택영역에 실제 데이터가 저장이 되지만,
참조형같은 경우는 스택영역에 주소가 저장되고 실제데이터는 힙 영역에 저장된다.


아직 클래스에서 매개변수와 파라미터를 이용하는게 어려움!


클래스 기본구조!!!!!

class Main {
	public static void main(String[] args) {
		자동차 벤츠 = new 자동차();
//		클래스명 실체화할 이름 = new 클래스명();
		벤츠.속도 = 240; // 선언된 변수에 할당
		벤츠.속력(); // void 출력
		
		
		
	}
}
class 자동차 {
	int 속도; // 변수 선언
	void 속력 () { // 
		System.out.println(속도); // void를 이용한 출력
	}
}
Test atest = new Test();

Class test {
int a;

void run () {
System.out.printlm(00000);
}

}

계산기 설계도 만들거임 이해를 못한다면 수업사이트에 영상을 참조할 것

public class CaculatorSysout {
    public static void main(String[] args) {
        /*
        * 계산기 설계도 만들거임
계산기 class 만들고
안에 사칙연산이 다들어가야됨
플러스 마이너스 나누기 곱하기

처음에는 두 개의 매개변수를 받아서 더해주는 함수를 만들고
클래스안에 함수를 매서드라고 함
받아서 값을 리턴하고
객채의 설게도대로 실체화해서 실행시켜야 한다.*/

        계산기 a계산기= new 계산기();
        a계산기.plus(2, 5);
        a계산기.minus(2, 5);
        a계산기.time(2, 5);
        a계산기.divide(2, 5);






    }
}

class 계산기 {
    void plus (int a, int b) {
        System.out.println("더하기 값 = " + (a + b));
    }
    void minus (int a, int b) {
        System.out.println("빼기 값 = " + (a - b));
    }
    void time (int a, int b) {
        System.out.println("곱하기 값 = " + (a * b));
    }
    void divide (int a, int b) {
        System.out.println("나누기 값 = " + (a / b));
    }

}
public class CaculatorReturn {
    public static void main(String[] args) {
        // 매개변수를 이용해서 파라미터 입력해서 출력하는데 System.out.println(); 대신 return;으로 출력한 방법
        계산기2 a계산기= new 계산기2();
        System.out.println("a + b = " + a계산기.더하기2(1, 2));

    }
}
class 계산기2 {
    int 더하기2 (int a, int b) {
        int result = a + b;
        return result;
    }
}

상속
반복되고 불필요한게 보이면 간결하게 만드는게 개발자의 업무이기 때문에 상속과 같은 구문을 잘 활용해야 코드가 간결해진다.

class Main { // 상속의 개념
	public static void main(String[] args) {
//		class명 실체화할 고유이름 = new class명();
		검은고양이 a검은고양이 = new 검은고양이(); // 검은고양이 실체화
		a검은고양이.숨쉬다(); // class 고양이에 있는 내용을 상속받아서 System.out.println("숨쉬다"); 실행
		// 고유이름.void명();
		
		하얀고양이 a하얀고양이 = new 하얀고양이(); // 하얀고양이 실체화
		a하얀고양이.숨쉬다(); // class 고양이에 있는 내용을 상속받아서 System.out.println("숨쉬다"); 실행
		
		회색고양이 a회색고양이 = new 회색고양이(); // 하얀고양이 실체화
		a회색고양이.숨쉬다(); // class 고양이에 있는 내용을 상속받아서 System.out.println("숨쉬다"); 실행
	}//상속으로 공통된 데이터를 묶어놓으면 코드가 간결해진다.
}
class 고양이 { 
	void 숨쉬다 () {
		System.out.println("숨쉬다");
	}	
	void 달린다 () {
		System.out.println("달린다");
	}
	void 뛰어넘다 () {
		System.out.println("뛰어넘다");
	}
	void 간택하다 () {
		System.out.println("간택하다");
	}
}
class 검은고양이 extends 고양이 { // class 고양이 에 있는 내용을 기본적으로 상속받고 로직 시작
	void 미래를예측하다() {
		System.out.println("특수스킬-미래를예측하다");
	}
}
class 하얀고양이 extends 고양이 { // class 고양이 에 있는 내용을 기본적으로 상속받고 로직 시작
	void 상대를교란시킨다() {
		System.out.println("특수스킬-상대를교란시킨다");
	}
}
class 회색고양이 extends 고양이 {
	
}

오리시뮬레이션 게임 실체화(void 실습)

/* 가정
우리는 게임개발회사에 입사했다.
우리에게는 성격좋은 사수 한명이 있다.
내가 개발할 게임은 오리시뮬레이션 게임이다.
선임이 나의 개발을 도와주진 않지만 조언은 해준다.
*/

/* 요구사항
- D1 요구 : 오리를 생성하고 날게하시오.
*/

class Main {
  public static void main(String[] args) {
    오리 a오리 = new 오리();
    a오리.날다();
    // 출력 : 오리가 날개로 날아갑니다.
  }
}

// 이하 정답 작성
class 오리 {
	void 날다 () {
		System.out.println("오리가 날개로 날아갑니다.");
	}
}
/* 가정
우리는 게임개발회사에 입사했다.
우리에게는 성격좋은 사수 한명이 있다.
내가 개발할 게임은 오리시뮬레이션 게임이다.
선임이 나의 개발을 도와주진 않지만 조언은 해준다.
*/

/* 요구사항
- D1 요구 : 오리를 생성하고 날게하시오.
- D1 완료 : 클래스와 메서드를 만들어서 처리
- D2 요구 : 게임의 디테일을 살리기 위해서 `청둥오리`와 `흰오리`를 생성하고 날게하시오.
*/

class Main {
  public static void main(String[] args) {
    청둥오리 a청둥오리 = new 청둥오리();
    a청둥오리.날다();
    // 출력 : 오리가 날개로 날아갑니다.
    
    흰오리 a흰오리 = new 흰오리();
    a흰오리.날다();
    // 출력 : 오리가 날개로 날아갑니다.
  }
}

class 청둥오리 {
  void 날다() {
    System.out.println("오리가 날개로 날아갑니다.");
  }
}
class 흰오리 {
  void 날다() {
    System.out.println("오리가 날개로 날아갑니다.");
  }
}
/* 가정
우리는 게임개발회사에 입사했다.
우리에게는 성격좋은 사수 한명이 있다.
내가 개발할 게임은 오리시뮬레이션 게임이다.
선임이 나의 개발을 도와주진 않지만 조언은 해준다.
*/

/* 요구사항
- D1 요구 : 오리를 생성하고 날게하시오.
- D1 완료 : 클래스와 메서드를 만들어서 처리
- D2 요구 : 게임의 디테일을 살리기 위해서 `청둥오리`와 `흰오리`를 생성하고 날게하시오.
- D2 완료 : 클래스와 메서드를 만들어서 처리
- D3 요구 : 오리 계열의 클래스에 날다 메서드가 중복되었습니다. 중복을 제거해주세요.
*/

class Main {
  public static void main(String[] args) {
    청둥오리 a청둥오리 = new 청둥오리();
    a청둥오리.날다();
    // 출력 : 오리가 날개로 날아갑니다.
    
    흰오리 a흰오리 = new 흰오리();
    a흰오리.날다();
    // 출력 : 오리가 날개로 날아갑니다.
  }
}

class 오리 {
  void 날다() {
    System.out.println("오리가 날개로 날아갑니다.");
  }
}

class 흰오리 extends 오리 {
}

class 청둥오리 extends 오리 {
}
/* 가정
우리는 게임개발회사에 입사했다.
우리에게는 성격좋은 사수 한명이 있다.
내가 개발할 게임은 오리시뮬레이션 게임이다.
선임이 나의 개발을 도와주진 않지만 조언은 해준다.
*/

/* 요구사항
- D1 요구 : 오리를 생성하고 날게하시오.
- D1 완료 : 클래스와 메서드를 만들어서 처리
- D2 요구 : 게임의 디테일을 살리기 위해서 `청둥오리`와 `흰오리`를 생성하고 날게하시오.
- D2 완료 : 클래스와 메서드를 만들어서 처리
- D3 요구 : 오리 계열의 클래스에 날다 메서드가 중복되었습니다. 중복을 제거해주세요.
- D3 완료 : 상속을 사용해서 처리
- D4 요구 : 게임의 재미를 위하여 고무오리를 추가하고 날게 하시오.
*/

class Main {
  public static void main(String[] args) {
    청둥오리 a청둥오리 = new 청둥오리();
    a청둥오리.날다();
    // 출력 : 오리가 날개로 날아갑니다.
    
    흰오리 a흰오리 = new 흰오리();
    a흰오리.날다();
    // 출력 : 오리가 날개로 날아갑니다.
    
    고무오리 a고무오리 = new 고무오리();
    a고무오리.날다();
    // 출력 : 오리가 날개로 날아갑니다.
  }
}

class 오리 {
  void 날다() {
    System.out.println("오리가 날개로 날아갑니다.");
  }
}

// 오리 => 부모 클래스
// 흰오리 => 자식 클래스
// 흰오리 extends 오리 => 흰오리가 오리의 능력을 물려 받는다.
// "`흰오리`는 `오리`이다." 라고 자바에게 알려준다.
// `A 는 B 이다.` 테스트에 통과하는 것만 상속이 가능하다.
// 클래스와 객체는 명사이다.
// 메서드는 동사이다.
class 흰오리 extends 오리 {
	
}

class 청둥오리 extends 오리 {
	
}

class 고무오리 extends 오리 {
	void 날다 () {
		System.out.println("저는 날 수 없어요 ㅜㅠ");
	}
}
/* 가정
우리는 게임개발회사에 입사했다.
우리에게는 성격좋은 사수 한명이 있다.
내가 개발할 게임은 오리시뮬레이션 게임이다.
선임이 나의 개발을 도와주진 않지만 조언은 해준다.
*/

/* 요구사항
- D1 요구 : 오리를 생성하고 날게하시오.
- D1 완료 : 클래스와 메서드를 만들어서 처리
- D2 요구 : 게임의 디테일을 살리기 위해서 `청둥오리`와 `흰오리`를 생성하고 날게하시오.
- D2 완료 : 클래스와 메서드를 만들어서 처리
- D3 요구 : 오리 계열의 클래스에 날다 메서드가 중복되었습니다. 중복을 제거해주세요.
- D3 완료 : 상속을 사용해서 처리
- D4 요구 : 게임의 재미를 위하여 고무오리를 추가하고 날게 하시오.
- D4 완료 : 클래스와 메서드를 만들어서 처리
- D5 요구 : 주말 주주회의에서 고무오리가 하늘을 날아다니는 것에 대해서 태클이 들어왔습니다. 고무오리 계열은 하늘을 날 수 없게 해주세요.
- D5 완료 : 메서드 오버라이드를 사용해서 처리
- D6 요구 : 고무오리가 반응이 좋습니다. 고무2오리를 추가하고 날게 해주세요.
*/

class Main {
  public static void main(String[] args) {
    청둥오리 a청둥오리 = new 청둥오리();
    a청둥오리.날다();
    // 출력 : 오리가 날개로 날아갑니다.
    
    흰오리 a흰오리 = new 흰오리();
    a흰오리.날다();
    // 출력 : 오리가 날개로 날아갑니다.
    
    고무오리 a고무오리 = new 고무오리();
    a고무오리.날다();
    // 출력 : 저는 날 수 없어요. ㅜㅠ
    
    고무2오리 a고무2오리 = new 고무2오리();
    a고무2오리.날다();
    // 출력 : 저는 날 수 없어요. ㅜㅠ
  }
}

class 오리 {
  void 날다() {
    System.out.println("오리가 날개로 날아갑니다.");
  }
}

// 오리 => 부모 클래스
// 흰오리 => 자식 클래스
// 흰오리 extends 오리 => 흰오리가 오리의 능력을 물려 받는다.
// "`흰오리`는 `오리`이다." 라고 자바에게 알려준다.
// `A 는 B 이다.` 테스트에 통과하는 것만 상속이 가능하다.
// 클래스와 객체는 명사이다.
// 메서드는 동사이다.
class 흰오리 extends 오리 {
  
}

class 청둥오리 extends 오리 {
}

class 고무오리 extends 오리 {
  // 메서드 재정의 라고 합니다.
  // 메서드 오버라이드 라고도 합니다.
  // 메서드 재정의 => 부모가 물려준 능력을 다시 구현한다.
  void 날다() {
    System.out.println("저는 날 수 없어요. ㅜㅠ");
  }
}
class 고무2오리 extends 고무오리 {
	
}
/* 가정
우리는 게임개발회사에 입사했다.
우리에게는 성격좋은 사수 한명이 있다.
내가 개발할 게임은 오리시뮬레이션 게임이다.
선임이 나의 개발을 도와주진 않지만 조언은 해준다.
*/

/* 요구사항
- D1 요구 : 오리를 생성하고 날게하시오.
- D1 완료 : 클래스와 메서드를 만들어서 처리
- D2 요구 : 게임의 디테일을 살리기 위해서 `청둥오리`와 `흰오리`를 생성하고 날게하시오.
- D2 완료 : 클래스와 메서드를 만들어서 처리
- D3 요구 : 오리 계열의 클래스에 날다 메서드가 중복되었습니다. 중복을 제거해주세요.
- D3 완료 : 상속을 사용해서 처리
- D4 요구 : 게임의 재미를 위하여 고무오리를 추가하고 날게 하시오.
- D4 완료 : 클래스와 메서드를 만들어서 처리
- D5 요구 : 주말 주주회의에서 고무오리가 하늘을 날아다니는 것에 대해서 태클이 들어왔습니다. 고무오리 계열은 하늘을 날 수 없게 해주세요.
- D5 완료 : 메서드 오버라이드를 사용해서 처리
- D6 요구 : 고무오리가 반응이 좋습니다. 고무2오리를 추가하고 날게 해주세요.
- D6 완료 : 고무오리가 반응이 좋습니다. 고무2오리를 추가하고 날게 해주세요.
- D7 요구 : 고무오리계열에서 날다 메서드의 중복을 제거해주세요.
- D7 완료 : 상속으로 해결
- D8 요구 : 자바에서 다중상속은 불가능 합니다. 상속에는 한계가 있습니다. 복잡한 상속을 사용하지 않고 고무오리계열의 중복을 제거해주세요.
  - 복잡한 상속을 사용하지 않는다는 것의 의미 : 모든 오리 계열 클래스들은 부모클래스가 오리 클래서 여야 한다.
*/

class Main {
  public static void main(String[] args) {
    청둥오리 a청둥오리 = new 청둥오리();
    a청둥오리.날다();
    // 출력 : 오리가 날개로 날아갑니다.
    
    흰오리 a흰오리 = new 흰오리();
    a흰오리.날다();
    // 출력 : 오리가 날개로 날아갑니다.
    
    고무오리 a고무오리 = new 고무오리();
    a고무오리.날다();
    // 출력 : 저는 날 수 없어요. ㅜㅠ
    
    고무2오리 a고무2오리 = new 고무2오리();
    a고무2오리.날다();
    // 출력 : 저는 날 수 없어요. ㅜㅠ
  }
}

class 오리 {
  void 날다() {
    System.out.println("오리가 날개로 날아갑니다.");
  }
}

// 오리 => 부모 클래스
// 흰오리 => 자식 클래스
// 흰오리 extends 오리 => 흰오리가 오리의 능력을 물려 받는다.
// "`흰오리`는 `오리`이다." 라고 자바에게 알려준다.
// `A 는 B 이다.` 테스트에 통과하는 것만 상속이 가능하다.
// 클래스와 객체는 명사이다.
// 메서드는 동사이다.
class 흰오리 extends 오리 {
  
}

class 청둥오리 extends 오리 {
  
}

class 고무오리 extends 오리 {
  // 메서드 재정의 라고 합니다.
  // 메서드 오버라이드 라고도 합니다.
  // 메서드 재정의 => 부모가 물려준 능력을 다시 구현한다.
  void 날다() {
    System.out.println("저는 날 수 없어요. ㅜㅠ");
  }
}

class 고무2오리 extends 고무오리 {
}
// 백지에서 작성해보자!!
// 문제 : 고무오리, 고무2오리, 흰오리, 청둥오리 객체를 만들고 날게 해주세요. 단 고무오리 계열은 날 수 없습니다.
// 조건 : 메서드는 중복될 수 없습니다.

class Main {
  public static void main(String[] args) {
	  오리 a오리 = new 오리();
	  a오리.날다();
	  
	  흰오리 a흰오리 = new 흰오리();
	  a흰오리.날다();
	  
	  청둥오리 a청둥오리 = new 청둥오리();
	  a청둥오리.날다();
	  
	  고무오리 a고무오리 = new 고무오리();
	  a고무오리.날다();
	  
	  고무2오리 a고무2오리 = new 고무2오리();
	  a고무2오리.날다();
	  
	  
  }
}
class 오리 {
	void 날다 () {
		System.out.println("제가 날고있어요!");
	}	
}
class 흰오리 extends 오리 {
	
}
class 청둥오리 extends 오리 {
	
}
class 고무오리 extends 오리 {
	void 날다 () {
		System.out.println("저는 날 수 없어요 ㅜㅜ");
	}	
}
class 고무2오리 extends 고무오리 {
	
}

git 관련 저장소 설명

profile
문제 해결을 위해 끊임없이 파고드는 걸 좋아합니다.

0개의 댓글