Day_18 ( Java 기초 문법 실습 - 3)

HD.Y·2023년 11월 22일
0

한화시스템 BEYOND SW

목록 보기
16/58
post-thumbnail

오늘 배운 문법 정리

  • 메서드(Method) 란 ?
    : 작업을 수행하기 위한 명령문의 집합으로, 어떤 매개변수 값을 입력받아서 처리하고
      그 결과를 돌려준다.
     ➡ 메서드 정의
    // 반환값이 있을 때 ✅
    [반환타입] [메서드이름] (매개변수타입 변수명) {
    		메서드 호출 시 수행횔 코드;
            return 반환할 변수;
    }
            
    // 반환값이 없을 때 ✅
    void [메서드 이름] () {
            메서드 호출 시 수행될 코드;
    }

  • 지역 변수 와 인스턴스 변수
    ➡ 인스턴스 변수 : 클래스 안에 만들어지고, 객체가 생성될 때 생성된다.
                  객체에 저장된 변수가 없을 때 GC(가비지 컬렉터)에 의해 자동으로
                  삭제된다.
    ➡ 지역 변수 : 메서드 안에 만들어지고, 메서드가 실행될 때 생성된다.
            또한, 메서드가 끝날 때 변수도 함께 삭제된다.

     public class Variables {
    
      Integer num;  // 인스턴스 변수 ✅
    
      void method(){
          Integer num; // 지역 변수 ✅
       }
      }

  • 생성자(Constructor)
    : 객체가 생성될 때마다 호출되는 객체 초기화 메서드로, 객체 변수의 초기화 또는 객체
      생성 시 수행할 작업에 사용한다.
 // 생성자를 사용하지 않은 경우 ✅
 class Student {
		String name;
		int age;
		String gender;
 }

 public class Main {

	public static void main(String[] args) {

		Student st = new Student();

		st.name = "임꺽정";
		st.age = 25;
		st.gender = "남자";
	}

  }
 
 // 생성자를 사용한 경우 ✅
 class Student {
	    String name;
	    int age;
	    String gender; 

    Student(String name, int age, int number) {
		this.name = name;
		this.age = age;
		this.number = number;
	}

  }

  • 상속(Inheritance)
    : 기존의 클래스를 재사용해서 새로운 클래스를 작성하는 것으로 자식 클래스는 부모   클래스의 모든 변수를 상속받는다.
      상속을 사용할 경우 여러 클래스에 공통적으로 사용되는 변수들이 있다고 할때,
      수정사항 발생 시 부모 클래스의 값만 수정해주면 여러개의 자식클래스에도
      한번에 동일하게 적용시킬 수 있다.

  • 오버로딩(Overloading)
    : 하나의 클래스에 같은 이름의 메서드를 여러 개 정의하는 것으로 매개변수의 유형과
      개수를 다르게 하여 다양한 유형의 호출에 응답이 가능하다.

  • 오버라이딩(Overriding)
    : 부모 클래스에서 정의한 메서드를 상속 받은 자식 클래스에서 재정의 하는 것이다.
      메서드의 이름과 매개변수의 유형이나 개수는 동일해야 하며, 메서드의 내용만
      변경하는 것이다.

     public class Parents {
           Long money =  1000000000000L;
      	   String island = "제주도";
      	   String land = "강남";
      	   String building = "63빌딩";
           
           // 오버로딩(Overloading) ✅
           void travel(Integer tax) {
           		tax = tax + 100;
           }         
           void travel(String island, Integer people) {
           		island = "마라도";
                  people = 6;
           }         
           void travel(String island) {
           		island = "마라도";
           }
           
      	   void shopping (String item){
      	   		building = building + ", " + item;
           }
     }
     
     public class Child extends Parents {   // Child 클래스가 Parents 클래스를 상속 ✅
      	   String car;
    
           public Child(String car) {
      	        this.car = car;
           }
    
           @Override // 오버라이딩(Overriding) ✅
      	   void shopping(String item) {
                building = building + ", " + item;
                money = money * 2;
           }
     }

🐧 실습 하기 ( 일반 포켓몬, 공중 포켓몬 ) 🐧

  • 일반 포켓몬에 대하여 기본적인 특성(체력, 경험치, 공격력 등) 및 기능(레벨업, 공격 하기, 이동하기 등) 을 메서드를 활용 하여 작성해봤다.
public class Poketmon {
    Integer x;           // x 좌표
    Integer y;           // y 좌표
    String name;         // 포켓몬 이름
    Integer hp;          // 체력
    Integer exp;         // 경험치
    Integer attackPower; // 공격력
    Integer shield;      // 방어력
    Integer type;        // 포켓몬 타입
    Integer level;       // 레벨

    // 레벨업
    Integer levelUp() {
        level = level + 1;
        attackPower = attackPower * 120 / 100;
        shield = shield * 105 / 100;
        hp = hp * 110 / 100;

        return level;
    }
    // 경험치 얻기
    Integer expUp(String monster) {
        // 만약에 monster 가 빅보스면
        //      현재 경험치에 10 추가
        if (monster == "bigBoss") {
            exp = exp + 100;
        }
        // 그렇지 않고 만약에 monster가 중간보스면
        //      현재 경험치에 50 추가
        else if(monster == "middleBoss") {
            exp = exp + 50;
        }
        // 그렇지 않고 만약에 monster가 스몰보스면
        //      현재 경험치에 10 추가
        else if(monster == "smallBoss") {
            exp = exp + 10;
        }
        // 만약에 현재 경험치가 100보다 크면
        //      레벨업
        if(exp >= 100) {
            levelUp();
            exp = exp % 100;
        }
        return exp;
    }
    // 공격 하기
    void attackTo(Poketmon target) {
        // 1부터 100 사의 랜덤 숫자를 생성
        // 만약 90 이상이면
        //      3배 크리티컬 공격
        // 그렇지 않고 만약에 80 이상이면
        //      2배 크리티컬 공격
        // 그렇지 않으면
        //      일반 공격
        Integer random = (int)(Math.random()*100) + 1;
        if(random >= 90) {
            target.attacked(this.attackPower, 3);
        } else if(random >= 80) {
            target.attacked(this.attackPower, 2);
        } else {
            target.attacked(this.attackPower);
        }
    }
    // 공격 받음
    Integer attacked(Integer attackPower){
        this.hp = this.hp - attackPower;
        if(hp <= 0) {
            this.die();
        }
        return hp;
    }
    // 크리티컬 공격 받음 (오버로딩)
    Integer attacked(Integer attackPower, Integer num){
        this.hp = this.hp - attackPower * num;
        if(hp <= 0) {
            this.die();
        }
        return hp;
    }
    // 죽을 경우
    void die() {
        this.recall();
        this.hp = 100;
    }
    // 이동 기능
    void move(Integer x, Integer y) {
        this.x = x;     
        this.y = y;
    }
    // 마을 귀환
    void recall() {
        x = 0;
        y = 0;
    }
}

  • 위는 "일반 포켓몬" 에 대한 기본 특성 및 기능들을 정리한 코드이고,
    아래는 "공중 포켓몬" 의 클래스이다. 공중 포켓몬은 일반 포켓몬과 동일한 특성과 기능을 가지고 있으면서 추가적으로 "날 수 있는 기능" 이 있다.
public class FlyPoketmon extends Poketmon {   // 일반 포켓몬 클래스 상속
    Integer z;

    // 난다
    void fly() {
        z = z + 10;
    }

    // 착륙한다
    void land() {
        z = z - 10;
    }
}
  • 이처럼 부모 클래스를 자식 클래스가 상속 받을 때, 부모 클래스에서 생성한 변수 및 기능들은 상속 받는 순간 별도의 생성 없이 자식 클래스에서 전부 사용이 가능하기 때문에 자식 클래스에서만 필요한 메서드에 대해서만 별도로 생성해주면 되어서 코드를 작성하기가 편리해진다.

오늘의 느낀점 👀

  • 오늘은 메서드와 상속 등에 대해서 문법을 배운 시간이었다. 문법을 하나씩 배워나갈수록 점점 사용하게 되는 것들도 많아지게 되는 것 같다. 그래도 이해하기 편했던게, 강사님께서 게임에 비교하여 설명 및 실습토록 해주셔서 처음이지만 이해하기가 수월했던 것 같다.

  • 벌써 3일째 자바 언어에 대해서 공부 및 실습을 하고 있는데, 문제 풀때 나의 실력도 조금씩 향상되어가는게 보여서 뿌듯함을 느낀다.

  • 이렇게 꾸준히 프로그래머스 문제도 풀고, 배웠던 문법들에 대한 개념을 반복적으로 학습하는게 중요하다고 생각하며, 오늘도 프로그래머스 5개 챌린지를 이어 나간다.🔥🔥

profile
Backend Developer

0개의 댓글