클래스&객체&필드&메서드

InSeok·2022년 7월 10일
0

TIL

목록 보기
10/51

목차


  1. 클래스
  2. 객체
  3. 필드
  4. 메서드
  5. 메서드 오버로딩

배운 내용


  • Reference(참조) : 참조를 하려면 메모리 어딘가에 인스턴스가 있어야 한다.
  • Static(정적): 모든 객체와 메모리 공유

객체(Object) : '모든 실재(實在)하는 어떤 대상, 사물 뿐만아니라 사람과 동물, 심지어 눈에 보이지 않는 어떤 논리나 개념 같은 것들도 객체다.

객체지향 프로그래밍(OOP, Object Oriented Programming) : 프로그래밍에서 필요한 데이터를 한 데 모아 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 특정 기능을 구성"하는 프로그래밍 방법론

실제 사물의 속성(state)과 기능(behavior)을 분석한 후에 이것을 프로그래밍의 변수와 함수로 정의함으로 실제 세계를 최대한 컴퓨터 프로그래밍에 반영

각 객체는 하나의 완전하고 독립적인 기능을 가지기 때문에, 그 자체로 유용하고 손쉽게 재활용
할 수 있습니다, 기존 코드를 활용해서 새로운 코드를 상대적으로 손쉽게 작성할 수 있고, 코드 간의 관계 설정을 통해 적은 노력으로도 쉽게 코드를 변경할 수 있게 합니다.

프로그래밍 설계의 측면에서 보면 프로그램 개발 및 유지 보수에 드는 비용과 시간을 획기적으로 줄일 수 있고, 객체를 통해 데이터를 관리하여 데이터를 손실 없이 관리하기에 용이합니다.

클래스

  • 클래스(Class)란 이러한 객체를 정의한 '설계도(blueprint)' 또는 '틀(frame)’
  • 클래스는 객체를 생성하는데 사용되며, 반대로 객체는 클래스에 정의되고 설계된 내용 그대로 생성됩니다
  • 클래스는 객체 그 자체가 아니라 단지 객체를 생성하는 데 사용되는 하나의 틀
  • 클래스를 통해 생성된 객체를 우리는 해당 클래스의 인스턴스(instance)라 부릅니다
  • 클래스로부터 객체를 만드는 과정을 우리는 인스턴스화(instantiate)
  • 객체는 모든 인스턴스를 포괄하는 넓은 의미를 가지고 있는 반면,
  • 인스턴스는 해당 객체가 어떤 클래스로부터 생성된 것인지를 강조
class 클래스명 { // 클래스 정의
	-- 생략 --
}

클래스 구성요소

  1. 필드(field) : 클래스의 속성을 나타내는 변수
  2. 메서드(method) : 클래스의 기능을 나타내는 함수
  3. 생성자(constructor) : 클래스의 객체를 생성하는 역할
  4. 이너 클래스(inner class) : 클래스 내부의 클래스
  • 멤버(member) : 생서자를 제외한 필드, 메서드 ,이너클래스 3가지요소

객체

  • 클래스를 통해 만들어진 인스턴스는 힙 메모리의 독립적인 공간에 저장되고, 동일한 클래스로부터 생성되었지만 객체의 고유한 개별성을 가집니다
클래스명 참조_변수명; // 인스턴스를 참조하기 위한 참조변수 선언
참조_변수명 = new 생성자(); // 인스턴스를 힙메모리에 생성 후, 객체의 주소를 참조 변수에 저장
  • new 키워드는 생성된 객체를 힙 메모리에 넣으라는 의미
  • 메서드 구현 코드는 클래스 영역에 저장되고 객체 안에서는 그 위치를 가리킨다.
  • 같은 클래스로 만든 모든 객체는 동일한 메서드 값을 공유하기 때문에 여러 번 같은 메서드를 선언해주는 것이 아니라 한번만 저장해두고 필요한 경우에만 클래스 영역에 정의된 메서드를 찾아 사용
  • .(포인트 연산자) : 해당 위치에 있는 객체 안을 보세요
 참조 변수명.필드명 // 필드값 불러오기
 참조 변수명.메서드명() // 메서드 호출

필드

  • **필드(Field) : 클래스에 포함된 변수, 객체의 속성을 정의 (클래스변수, 인스턴스변수)**
  • 변수 종류 : 선언된 위치에 따라 종류 결정
    • 클래스 변수(cv, class variable)

      • 클래스 변수는 독립적인 저장 공간을 가지는 인스턴스 변수와 다르게 공통된 저장공간을 공유합니다.
      • 한 클래스로부터 생성되는 모든 인스턴스 들이 특정한 값을 공유해야하는 경우에 주로 static 키워드를 사용하여 클래스 변수를 선언
      • 인스턴스 변수와 달리 인스턴스를 따로 생성하지 않고도 언제라도 클래스명.클래스변수명 을 통해 사용이 가능
    • 인스턴스 변수(iv, instance variable)

      • 인스턴스 변수(iv)는 인스턴스가 가지는 각각의 고유한 속성을 저장하기 위한 변수로 new 생성자() 를 통해 인스턴스가 생성될 때 만들어집니다.
      • 독립적인 저장 공간을 가진다.
    • 지역 변수(lv, local variable) -스택메모리에 저장
      - 메서드 내에 선언되며 메서드 내({} 블록)에서만 사용가능한 변수
      - 지역변수는 스택 메모리에 저장
      - 직접 초기화하지 않으면 값을 출력할 때에 오류가 발생하는 지역변수와는 다르게 필드 변수는 직접적으로 초기화를 실행하지 않더라도 강제로 초기화
      - 힙 메모리에는 빈공간이 저장될수 없어 강제 초기화, 스택 메모리는 강제로 초기화되지 않아, 지역변수는 반드시 초기화 해주어야 한다.

      class Example { // => 클래스 영역
      	int instanceVariable; // 인스턴스 변수
      	static int classVariable; // 클래스 변수(static 변수, 공유변수)
      
      	void method() { // => 메서드 영역
      		int localVariable = 0; // 지역 변수. {}블록 안에서만 유효
      	}
      }

static 키워드

  • 정적 멤버(static member) : static키워드가 붙어있는 멤버
  • 정적 멤버는 클래스 내부에 저장 공간을 가지고 있기 때문에 객체 생성 없이 곧바로 사용가능
  • 정적 필드는 객체 간 공유 변수의 성질이 있다. 정적 메서드도 동일
  • 정적 메서드의 경우 인스턴스 변수 또는 인스턴스 메서드를 사용할 수 없다.
    • 정적 메서드안에서 인스턴스 변수를 사용하려면 body부분에 객체를 생성하여 사용하면된다.
  public static void main(String[] args) {
        StaticField staticField1 = new StaticField(); // 객체 생성
        StaticField staticField2 = new StaticField();

        staticField1.num1 = 100;
        staticField2.num1 = 1000;

메서드(Method)

  • 메서드는 “특정 작업을 수행하는 일련의 명령문들의 집합"(클래스의 기능 담당)
자바제어자 반환타입 메서드명(매개 변수) { // 메서드 시그니처
	메서드 내용 // 메서드 바디
}
  • 메서드의 반환타입이 void가 아닌 경우에는 메서드 바디({} )안에 반드시 return 문이 존재해야 합니다.

메서드의 호출

  • 메서드도 클래스의 멤버이므로 클래스 외부에서 메서드를 사용하기 위해서는 먼저 인스턴스를 생성해야합니다.
  • 포인트 연산자(.)를 통해 메서드를 호출
  • 클래스 내부에 있는 메서드끼리는 따로 객체를 생성하지 않고도 서로를 호출할 수 있습니다.
    • 메모리의 클래스 영역 내부에 저장되어 공유하기 때문
  • 인자(argument) : 메서드 호출 시 괄호() 안에 넣어주는 입력 값
    • 인자의 개수와 순서는 반드시 메서드를 정의할 때 선언된 매개변수와 일치되어야 합니다.

메서드 오버로딩(Method Overloading)

  • 하나의 클래스 안에 같은 이름의 메서드를 여러 개 정의하는 것
  • 메서드 시그니처 : 메서드명과 매개변수의 자료형
  • 메서드를 오버로딩하려면
    • 메서드의 이름이 같아야 합니다.
    • 매개변수의 개수 또는 타입이 달라야 합니다.
    • 반환 타입은 오버로딩이 성립하는 데에 영향을 주지 못합니다.
  • 장점 : 하나의 메서드로 여러 경우의 수를 해결할 수 있다
profile
백엔드 개발자

0개의 댓글