클래스와 객체, 필드와 메서드

이용만·2023년 2월 23일
0

선생님이 말씀하시는 객체지향의 중요성

  • 스프링 프레임워크는 객체지향 특성을 효과적으로 사용할 수 있는 프레임워크다.
  • 결합도를 낮추기 위함. 그럼 변화와 확장에 유연해진다.
  • 변화 확장의 유연한 설계를 늘리기 위해 클래스, 객체, 상속, 다형성, 추상화, 캡슐화 쓰이는 것
  • 객체지향 설계 원리(Solid)라는 것도 중요하다.
  • 객체지향 프로그래밍 뭔지, 어디에 쓰이는지, 7일간 학습을 꼭 해보자.

학습 목표

  • 객체지향 프로그래밍의 가장 기본적인 토대인 객체를 이해할 수 있다.
  • 객체를 만드는 데 필요한 클래스의 개념을 이해하고, 그 구성요소와 기본 문법을 설명할 수 있다.
  • 객체의 두 가지 구성 요소, 속성과 기능이 무엇인지 이해할 수 있다.
  • 클래스에 기반하여 new 키워드를 통해 객체를 생성하고, 이를 활용할 수 있다.
  • 클래스와 객체의 차이에 대해 설명하고, 둘의 관계를 정의할 수 있다.

클래스

클래스 : 객체를 정의한 설계도 또는 틀이다. 객체를 생성하는데 사용된다. (설계도)
객체 : 클래스에 정의되고 설계된 내용 그대로 생성된다.(설계도대로 만들어진 제품)
클래스는 객체 그 자체가 아니라 단지 객체를 생성하는데 사용되는 하나의 틀이다
인스턴스 : 클래스를 통해 생성된 객체를 해당 클래스의 인스턴스라고 부른다. 객체를 만드는 과정을 우리는 '인스턴스화' 라고 부른다.

  • 객체와 인스턴의 차이는?
    구분할 필요는 없으나 굳이 하자면 객체는 모든 인스턴스를 포괄하는 넓은 의미. 인스턴스는 해당 객체가어떤 클래스로부터 생성된 것인지를 강조한다.

  • 왜 클래스 생성 후 객체를 생성해야하는가?
    붕어빵 틀만 잘 만들어놓으면 백번이고 천번이고 같은 모양의 붕어빵을 잘 만들어낸다.
    그래서 클래스를한번 잘 정의해 놓으면, 매번 객체를 생성할 때마다 어떻게 객체를 만들어야 할지 더 이상 고민하지 않고 클래스로부터 객체를 새엉해 사용하면 된다.

클래스의 구조

public class ExampleClass {
	int x = 10; // (1)필드
	void printX() {...} // (2)메서드
	ExampleClass {...} // (3)생성자
	class ExampleClass2 {...} // (4)이너 클래스
} 
  • 필드 : 클래스의 속성을 나타내는 변수 ex) 자동차. 모델명, 컬러, 바퀴의 수
  • 메서드 : 클래스의 기능 ex) 시동, 가속, 정지
  • 생성자 : 클래스의 객체를 생성하는 역할
  • 이너클래스 : 클래스 내부의 클래스를 의미
    클래스의 멤버 : 필드, 메서드, 이너클래스

객체

객체는 크게 속성과 기능이라는 두 가지 구성요소로 이뤄진다.

객체생성은 new 키워드로 생성한다.

클래스명 참조_변수명 = new 생성자();

new 키워드는 생성된 객체를 힙 메모리에 넣으라는 의미를 가지고 있는데, 생성자를 통해 객체가 만들어지면 해당 객체를 힙 메모리에 넣는 역할을 한다.

따라서 우리가 new 키워드와 생성자를 통해 클래스의 객체를 생성한다는 것은 해당 객체를 힙 메모리에 넣고 그 주소값을 참조변수에 저장하는 것과 같습니다.

클래스 Person과 참조 변수 p는 각각 클래스 영역과 스택 영역이라는 다른 위치에 저장된다.
생성자로 만들어진 인스턴스는 힙 메모리 영역에 들어가 객체 내부에는 클래스의멤버들이 위치하게 된다.
주목해야할 것은 메서드의 구현 코드 위치가 클래스 영역에 저장되고 객체 안에서는 그 위치를 가리키고 있다.
즉 같은 클래스로 만든 모든 객체는 동일한 메서드 값을 공유하기에 한번만 저장해두고 필요한 경우 클래스 영역에 정의된 메서드를 찾아 사용할 수 있다는 것이다.
기억해야할 것은 생성된 객체에서 필드값은 실제 저장공간이 객체 내부에 있다는 것과 메서드는 다른 영역에 하나만 저장해놓고 공유한다는 점이다.

객체의 활용

위 방법대로 생성된 객체를 활용하려면
'.' = 포인트 연산자 = 해당 위치에 있는 객체 안을 보세요" 의미이다.

참조 변수명.필드명 // 필드값 불러오기
참조 변수명.메서드명() // 메서드 호출

*내가 약한 부분
객체를 생성할 때 특정 클래스 타입의 참조 변수를 선언 후 new 키워드와 생성자를 통해 인스턴스를 생성하는데 이 때 참조변수에 할당을 한다.
참조변수는 실제 데이터 값이 아니라 실제 데이터가 저장되어 있는 힙 메모리의 주소값을 가리킨다.

profile
성장하는 개발자가 되고자 합니다.

0개의 댓글