2022-05-11 데일리 회고 (After) 11-12일차

Sung-min Seo·2022년 5월 11일
0

⭐ 오늘의 학습 내용 📌

Java OOP

🥕 Class

1. 객체 (Object)

    클래스에 설명하기 앞서 우선 객체(Object)의 개념부터 필요하다. 객체란 어떠한 물체라도 될수 있으며 상태(State)와 행동(Behaviors)을 구분할수 있어야 한다.
    예를 들어 공을 객체로 삼았을 때 공이 멈췄을 때를 상태 공이 굴러 갈때를 행동이라고 구분할수 있다.

2. 클래스 (Class)

    클래스는 이러한 객체의 상태들과 행동들을 설계도로 만들어 둔 것이다.
    클래스가 생성되었다면 이후에 우리가 공(객체)을 만든다고 했을 때 클래스를 사용하여 바로 공을 만들수 있으며 시간을 절약할수 있게 된다.

📌 Class의 구조는 다음과 같다.

class Ball{
//이곳에 필드와 메서드가 들어가게 된다.  
}

3. 인스턴스 (instance)

    클래스를 만듦으로써 설계도가 완성되고 이후에 공(객체)을 만들게 되었다면 메모리라는 창고에 만들어둔 공을 쌓아 두어야 한다. 이러한 일련의 과정을 인스턴스화 라고 한다.

📌 Class의 구조는 다음과 같다.

public class ball_Example {
  public static void main(String[] args) {
      Ball baseball = new Ball(); // new라는 명령어를 통해 객체를 만들고 인스턴스화를 진행.
      baseball.speed(); //speed 매서드를 호출하여 실행시킨다.
  }

  static class Ball { // 이곳에서 클래스를 선언해 주었다.
      String ball_Type; // 클래스의 상태를 한줄로 표현해 줄수 있는 필드 영역이다.

      public void speed() { // 클래스의 기능을 설명해주는 메서드 영역이다.
          System.out.println("맞으면 아파요...");
      }
  }
}
    이런식으로 만들어진 클래스는 한번에 여러개의 객체를 만들어 낼때 유용하며 오버로딩(overloading)을 사용하여 변수를 바꿔 사용할수도 있게 된다.

4. 오버로딩

    오버로딩이란 같은 클래스 설계도를 사용하지만 사용하는 매개 변수에 따라서 실행되는 매서드가 달라지는 것을 뜻한다.

📌 오버로딩 예시

public class ball_Example {
  public static void main(String[] args) {
      Ball baseball = new Ball(); 
      baseball.speed(); //speed 매서드를 호출하여 실행시킨다.
      				    // 결과 값: "맞으면 아파요..."
      baseball.speed(200); //오버로드된 speed 매서드를 호출하여 실행시킨다.
      				       // 결과 값: "맞으면 죽어요..."
  }

  static class Ball { 
      String ball_Type; 

      public void speed() { 
          System.out.println("맞으면 아파요...");
      }
      public void speed(int highspeed) {     // 오버로드된 매서드
          System.out.println("맞으면 죽어요...");
      }
  }
}
    이렇게 되면 표현하고자 하는 객체가 다를 경우 다시 새로운 클래스를 만드는 대신 매개 변수를 변화시켜 만들고자 하는 객체에 변화를 줄수 있다.

🥕 Method? 생성자?

1. 매서드 (Method)

    위에서 간단하게 언급한 것과 같이 매서드란 클래스에서 표현하고자 하는 상태를 한줄로 표현(필드)하기 어려울 때 클래스의 기능을 표현하는 방법을 뜻한다.
    메서드는 메서드의 매개변수를 넣는 메서드 시그니처 부분과 메서드의 내용을 넣는 메서드 바디로 나누어진다.

📌 메서드의 구성과 호출

public static void main(String[] args) {
	System.out.println(account());   //매서드를 호출하여 값을 출력한다.
}

public static String account() {	//매서드의 시그니쳐 부분이다.
      return "비었어요!";			//매서드의 바디 부분이다.
}
    위의 예시 같이 메서드의 마지막에는 반드시 return 값을 지정해 주어야 한다.

2. 생성자 (Constructors)

    자바에서 생성자는 메서드와 비슷한 면이 많다. 매서드와 생성자 모두 새로운 객체를 생성할시 적용되지만 몇가지 차이점을 가지고 있다.
    우선 생성자란 새로운 객체를 만들었을 때 그 객체가 실제로 사용되기 전에 한번 초기화를 해주는 것을 말한다.
    생성자는 메서드와는 다르게 타입을 따로 지정해줄수 없으며 접근 제어자 수식인 protected, public, private 만을 사용 가능하다.
    또한 메서드와는 다르게 return 값을 사용하지 않으며 상속되는 값이 없기 때문에 오버로딩만 가능하고 오버라이딩은 사용이 불가능하다.
class Constructor{
	public String type;   // 전역 변수를 선언한다.

	public static void main(String[] args) {
      Constructor ball = new Constructor();//이곳에서 객체를 생성하며 인스턴스화를 진행해준다.
      									   //이때 생성자가 적용되며 초기화가 진행된다. 
      System.out.println("이공의 종류는 : " + ball.type);
	}

	Constructor(){  // 생성자는 보통 클래스의 이름과 같은 이름을 사용한다.
        type = "야구공";
    }
}

⭐ 오늘의 소감

평소 공부할때는 그저 변수! 메서드! 함수! 이런식으로만 코딩을 구성했었는데 이렇게 본격적으로 여러가지 개념들을 나누어 배우고 객체와 인스턴스 메서드와 생성자등 같은 것 같지만 서로다른 제어자들의 차이점들을 배울수 있어서 너무 좋았다.

profile
매일 문제 3개 이상 풀기!!

0개의 댓글