[TIL_230317] Java 공부

이진규·2023년 3월 17일
0

오늘 공부한 내용 ✍️

java

객체 지향 프로그래밍

  • 객체 (object)

    • 의사나 행위가 미치는 대상 (사전적 의미)
    • 구체적, 추상적 데이터의 단위 (학생,회원,생산,주문,배송)
  • 객체 지향 프로그램, 절차 지향 프로그래밍

    • 아침에 학교가는 과정 예로 들었을 때
    • 절차 지향 프로그래밍
      • 시간이나 사건의 흐름에 따른 프로그래밍
      • 일어난다 -> 씻는다 -> 밥먹는다 -> 버스탄다
    • 객체 지향 프로그래밍
  • 객체 지향 프로그램을 구현하는 법

    • 객체를 정의하고
    • 각 객체에 제공하는 기능들을 구현하고
    • 각 객체가 제공하는 기능들 간의 소통(메세지 전달)을 통하여 객체간의 협력을 구현
    • 프로그램 설계 때 이런 것들을 미리 정함 (엔티티, 오브젝트, 도메인 등으로 불림)
  • 클래스는 객체의 청사진

    • 객체의 속성은 클래스의 멤버 변수(member variable)로 선언

    • 학생 클래스

      public class Student {
        int studentId;
        String studentName;
        int majorCode;
        int grade;
      }
  • 객체 지향 프로그램을 할 때

    • 객체 정의
    • 각 객체의 속성을 멤버 변수로 역할을 메서드로 구현
    • 각 객체간의 협력을 구현
  • 클래스 코딩하기

    • 클래스는 대문자로 시작하는게 좋다
    • public = 공용
    • java 파일 하나에 클래스는 여러 개가 있을 수 있지만, public 클래스는 하나
    • public 클래스와 .java 파일의 이름은 동일해야함
    • camel notation 방식으로 명명

함수(function)와 메서드(method)

  • 함수란
    • 하나의 기능을 수행하는 일련의 코드
    • 구현된(정의된) 함수는 호출하여 사용하고 호출된 함수는 기능이 끝나면 제어가 반환됨
    • 함수로 구현된 하나의 기능은 여러 곳에서 동일한 방식으로 호출되어 사용 가능
  • 함수 정의하기
    • 함수는 이름, 매개 변수, 반환 값, 함수 몸체(body)로 구성됨
    int add(int num1, int num2) {
    		int result;
    		result = num1 + num2;
    		return result;
      }
    • 반환(return)이 없는 경우 -> 함수명 앞에 void 쓰면 됨
    • 매개 변수 없는 경우 -> 비워놓으면 됨 ex) int add()
  • 함수 호출과 스택 메모리
  • 메서드 (method)
    • 객체 기능 구현 위해 클래스 내부에 구현되는 함수
    • 함수는 독립적, 메서드는 함수 내에 구현
    • 멤버 함수 (member function)이라고도 함
    • 메서드를 구현함으로써 객체의 기능이 구현
    • 메서드의 이름은 그 객체를 사용하는 객체(클라이언트)에 맞게 짓는것이 좋음 ex) getStudentName()
    • 객체의 속성은 멤버 변수로, 객체의 기능은 메서드로 구현
    • 클래스를 기반으로 생성된 객체 -> 인스턴스 ex) 학생 -> 클래스, 특정 학생 -> 인스턴스

인스턴스 생성과 힙 메모리

  • 인스턴스 (instance)
    • 클래스: 객체의 속성을 정의 하고, 기능을 구현하여 만들어 놓은 코드 상태
    • 실제 클래스 기반으로 생성된 객체(인스턴스)는 각각 다른 멤버 변수 값을 가지게 됨
    • 가령, 학생의 클래스에서 생성된 각각의 인스턴스는 각각 다른 이름, 학번, 학년등의 값을 가지게 됨
    • new 키워드를 사용하여 인스턴스 생성
  • 힙 메모리
    • 생성된 인스턴스는 동적 메모리(heap memory) 에 할당됨
    • C나 C++ 언어에서는 사용한 동적 메모리를 프로그래머가 해제 시켜야 함 ( free() 난 delete 이용)
    • 자바에선 Gabage Collector 가 주기적으로 사용하지 않는 메모리를 수거
    • 하나의 클래스로 부터 여러개의 인스턴스가 생성되고 각각 다른 메모리 주소를 가지게 됨

용어 정리

  • 객체 : 객체 지향 프로그램의 대상, 생성된 인스턴스
  • 클래스 : 객체를 프로그래밍 하기위해 코드로 정의해 놓은 상태
  • 인스턴스 : new 키워드를 사용하여 클래스를 메모리에 생성한 상태
  • 멤버 변수 : 클래스의 속성, 특성
  • 메서드 : 멤버 변수를 이용하여 클래스의 기능을 구현한 함수
  • 참조 변수 : 메모리에 생성된 인스턴스를 가리키는 변수
  • 참조 값 : 생성된 인스턴스의 메모리 주소 값

생성자 (constructor)

  • 생성자

    • 생성자 기본 문법
    <class_name>([<argument_list])
    {
    [<statements]
    }
    • 객체를 생성할 때 new 키워드와 함께 사용 ex) new Student();
    • 일반 함수처럼 기능을 호출하는 것 X -> 객체를 생성하기 위해 new 와 함께 호출됨
    • 객체가 생성될 때, 변수나 상수를 초기화하거나, 다른 초기화 기능을 수행하는 메서드를 호출 함
    • 생성자는 반환 값이 없고, 클래스의 이름과 동일
    • 대부분의 생성자는 외부에서 접근 가능하지만, 필요에 의해 private 으로 선언되는 경우도 있음
  • 기본 생성자 (default constructor)

    • 클래스에는 반드시 적어도 하나 이상의 생성자가 존재
    • 클래스에 생성자를 구현하지 않아도 new 키워드와 함께 생성자를 호출할 수 있음
    • 클래스에 생성자가 하나도 없는 경우 컴파일러가 생성자 코드를 넣어 줌 (안그런 경우도 있음)
    • public Student(){}
    • 매개 변수, 구현부가 없음
    • 직접 생성자를 만들면 기존 생성자 코드 안생김 -> 직접 넣어야함 (public Student(){})
    • 메서드 내 멤버 변수와 지역 변수 이름 같을 때, 멤버 변수 지정하려면 이름 앞에 this. 붙여야함 ex) this.studentName();
  • 생성자 만들기

    • 컴파일러가 제공해 주는 기본 생성자외에 필요에 의해 생성자를 직접 구현 할 수 있음
  • 기타

    • 오브젝트를 가져다주는 코드 = 클라이언트 코드
    • 서버 클라이언트 개념: 소프트웨어적 정의 -> 서비스를 제공하는 쪽 모듈 (서버) / 사용하는 쪽 모듈 (클라이언트)
  • 오버로딩 (overloading)

    • 생성자를 구현해서 사용 가능
    • 클래스에 생성자를 따로 구현하면 기본 생성자 (default constructor) 제공하지 않음
    • 생성자를 호출하는 코드(client 코드)에서 여러 생성자 중 필요에 따라 호출해서 사용 가능

어려웠던 내용 😅

  • 따로 없었다.

궁금한 내용 / 부족한 내용 🔍

  • java 스타일대로 서버, 클라이언트에 어떻게 디자인할 지 궁금하다.

느낀점 🤔

  • 그간 객체지향적 프로그래밍에 대한 갈증이 있었는데, 이 강의에선 객체지향 스타일로 가르쳐줘서 좋았다. 얼른 숙달됐으면.

자료 및 내용 출처: https://gitlab.com/easyspubjava/javacoursework/-/tree/master

profile
Junior Backend Developer

0개의 댓글