[TIL] 코드스테이츠 SEB BE Day 10

💡 Today I Will Learn

  • 블로깅
  • 클래스와 객체
  • 필드와 메서드

✏️ Summary


  • OOP (Object Oriented Programming)

    명령어들의 나열을 통해 실행되는 절차지향 프로그래밍과 달리 “프로그래밍에 필요한 데이터를 추상화시켜 객체를 만들고 객체들 간의 유기적인 상호작용“을 통해 기능을 구성.
    각각의 객체는 완전하고 독립적인 기능을 가지기 때문에, 유용하고 재활용 가능하다. 그렇기에 새롭게 코드를 작성할 때 용이하며 코드 간 관계 설정이 쉽다.

  • 클래스

    객체를 정의한 “설계도” 또는 “
    객체는 모든 인스턴스를 포함하는 넓은 의미인 반면, 인스턴스는 객체가 어떤 클래스로부터 생성된 것인지 강조.
    붕어빵
    붕어빵 기계(클래스)에서 많은 붕어빵 객체를 만들어내 인스턴스화 시킨다.

    • 구성요소와 기본문법

        class 클래스명{ // 첫 대문자
          // 필드, 메서드, 생성자, 이너클래스
        }
      

      클래스명의 앞글자는 대문자로 하는 것이 관례이다.

  • 객체

    클래스를 기반으로 만들어지며 실제 이용할 수 있는 실체이다.

    class Car{
      private String color;
      private int doors;
    
      void power(){}
      void accelerate(){}
    }
    

    Car 클래스 내에 기능과 속성을 각각의 필드와 메서드로 틀을 구성하였다.
    즉, 하나의 클래스와 관련된 정보들을 모아서 관리함으로써 직관적이고 유지보수가 용이하다.

    • 객체의 생성

        클래스명 변수명; // 인스턴스를 참조하기 위한 변수
        변수명 = new 생성자(); // 인스턴스 생성 후, 주소를 변수에 저장
      

      변수는 실제 데이터값이 아닌 Heap 메모리의 주소값을 가리킨다.

      클래스,스택,힙
      클래스와 변수는 클래스영역과 스택영역으로 각각 저장된다.
      new 생성자로 만들어진 인스턴스는 Heap 메모리에 저장되고, 내부에는 클래스 멤버들이 위치하게 된다.

      각 인스턴스의 메서드는 동일하므로 클래스영역의 메서드를 공유한다.

    • 객체의 활용
      .(참조연산자)를 이용하여 클래스 멤버들에 접근할 수 있다.

  • 필드

    클래스의 멤버 중 클래스의 속성을 나타내는 것이 필드이다.
    클래스에 포함된 변수를 의미하며, 크게 3가지로 구분된다.

    Class test{
      int instanceVariable; // 인스턴스 변수
      static int classVariable; // 클래스 변수
    
      void method(){
        int localVariable; // 지역 변수
      }
    }
    

    선언된 위치에 따라 종류가 결정되고, 각각의 범위를 갖게 된다.

    1. 클래스 변수 (static)
      모든 인스턴스들이 공유해야하는 속성인 경우 static을 이용해 선언한다.
      인스턴스를 따로 생성하지 않아도 클래스명.클래스변수명으로 사용이 가능하다.
    2. 인스턴스 변수
      new 생성자()로 인스턴스화 될때 생성된다.
    3. 지역 변수
      메서드 내 {} 블록안에서만 사용 가능한 변수이다.
      위의 두 멤버변수와 다르게 스택메모리에 저장되며 메서드 종료 시 소멸한다.

    지역변수는 초기화하지 않으면 오류가 발생하는 반면, 멤버변수는 강제로 초기화가 이루어진다. 이유는 Heap 메모리에 빈 공간이 저장될 수 없고, 반대로 스택 메모리는 가능하기 때문이다.

  • static

    static은 클래스의 멤버(필드, 메서드, 이너클래스)에 사용된다. static 키워드가 붙어있다면 ‘정적 멤버’라고 부른다.
    static으로 정의되어 있는 정적 멤버는 참조연산자로 호출이 가능하지만 static 임을 알도록 클래스명.정적멤버 사용을 권장한다.
    정적메서드 사용시에는 인스턴스 멤버를 사용할 수 없다. 이유는 인스턴스 생성 없이 사용 가능하기 때문이다.

  • 메서드

    클래스의 멤버 중 클래스의 기능을 나타내는 것이 메서드이다.

    접근제어자 (static) 반환타입 메서드명(매개변수){
      메서드 기능
    }
    

    반환타입이 void가 아닌 경우에 반드시 기능 내에 return이 존재해야 한다.

    • 호출
      클래스 내부에 존재하는 메서드 사이에서는 바로 호출할 수 있으며, 외부에서는 참조연산자를 통해 호출할 수 있다.
      함수를 호출할 때 매개변수로 넣어주는 입력값을 인자(argument)라 한다.
  • Overloading

    하나의 클래스안에서 메서드명은 같으나 매개변수가 서로다르게 정의하는 것.
    “메서드 시그니처”는 메스드명과 매개변수의 자료형을 의미하며 메서드를 서로 구분하는 용도로 사용된다.
    즉 메서드 시그니처가 서로 다르면 다른 메서드라고 인식한다.

    public class Overloading{
    
      public void test(){}
      public void test(int a){}
      public void test(double a){}
      public void test(int a, int b){}
    
    }
    

    위처럼 메서드명은 같지만 매개변수의 개수 또는 타입이 다르게 정의되어 있으면 Overloading 된 것이다.

    return 타입은 오버로딩에 영향을 주지 않는다.

    println() 메서드 또한 오버로딩으로 구현되어있으며, 이때문에 아무 인자를 넘겨도 문제가 없었던 것이다.

📌 정리


중요한 개념인 OOP 기초를 보며, 다시금 객체지향의 기초를 다질 수 있는 소중한 시간이 되었다. 부트캠프를 참여하지 않았다면 분명 이해는 하지 않고, 코드만 주구장창 치고 있을 나였을거다…😱

🎯 Tomorrow


  • 생성자

Back to [TIL] 코드스테이츠 SEB BE Day 9