오늘 배운 문법 정리 ✍
// 반환값이 있을 때 ✅
[반환타입] [메서드이름] (매개변수타입 변수명) {
메서드 호출 시 수행횔 코드;
return 반환할 변수;
}
// 반환값이 없을 때 ✅
void [메서드 이름] () {
메서드 호출 시 수행될 코드;
}
지역 변수 와 인스턴스 변수
➡ 인스턴스 변수 : 클래스 안에 만들어지고, 객체가 생성될 때 생성된다.
객체에 저장된 변수가 없을 때 GC(가비지 컬렉터)에 의해 자동으로
삭제된다.
➡ 지역 변수 : 메서드 안에 만들어지고, 메서드가 실행될 때 생성된다.
또한, 메서드가 끝날 때 변수도 함께 삭제된다.
public class Variables {
Integer num; // 인스턴스 변수 ✅
void method(){
Integer num; // 지역 변수 ✅
}
}
// 생성자를 사용하지 않은 경우 ✅
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개 챌린지를 이어 나간다.🔥🔥