코딩일기/OOP

Class(클래스)와 Object(객체)

SmileMaker 2023. 7. 26. 18:48

오늘은 OOP의 기본적인 내용인 클래스와 객체에 대해 기록해놓을 것이다.

공부할때 검색도 해보고 여기저기 찾아봤지만 대부분 어려운용어로 설명되어 있어 헷갈렸던 기억이 있다. 그러므로  나는 쉽게 기록해보려고한다.

자 그럼 시작해보자!


1-1. Class(클래스)란 무엇인가?

객체를 생성하기 위한 데이터와 알고리즘들을 하나로 묶은 집합이다. 즉 클래스는 객체를 생성하기 위해 존재하고 객체는 클래스의 데이터와 알고리즘으로 생성된다 라고 생각할 수 있다.

여기서 말하는 데이터와 알고리즘이 뭔지 다음 문단에서 알아보도록 하자

 


1-2. Class(클래스)의 구성요소

클래스의 구성요소로는 아래 3가지가 있다.

  • Member Variable(멤버 변수)
  • Member Method(멤버 메서드)
  • Constructor(생성자)

여기 적혀있는 (멤버 변수 = 데이터), (멤버 메서드 = 알고리즘) 이라고 보면된다. 생성자에 대해서는 추후 다뤄보도록 하고 이번 기록에서는 멤버 변수와 멤버 메서드에 대해 알아보도록 할것이다.

 

일단 멤버변수를 알기 위해서는 변수의 종류를 알 필요가 있어 2가지로 나열해보았다.

  1. 원시 변수 : 변수가 가지는 값이 평소에 자주 사용하던 문자, 숫자, 논리 형태인 변수
  2. 참조 변수 : 변수가 가지는 값이 데이터의 주소값을 띄는 변수

이렇게 나눠볼수 있는데 클래스와 객체를 다루는데에 있어서는 참조 변수를 많이 사용하게 된다. 왜냐하면 객체에 있는 변수의 값이나 메서드를 사용하기 위해서는 객체의 데이터 주소값을 통해 접근해야하기 때문이다. 이걸 반대로 이야기하면 객체의 데이터 주소값을 알지 못한다면 해당 객체에 접근할 수 없기때문에 사용이 불가능 하다는 말이된다.

 

다음으로는 멤버 메서드인데 멤버 변수가 데이터라고 했을때 멤버 메서드는 알고리즘이다. 대부분이 함수의 형태를 띄고 있으며 객체내부에서 처리해야하는 일이 있다면 클래스에 메서드를 추가하면 될것이다. 참고사항이 있다면 멤버 메서드는 반드시 1개이상의 매개변수가 있어야한다. 나는 이것을 문맥상 편리하게 self로 적어놓을 것이다.(다른 변수명으로 해도 문법상 아무문제가 없다.)

 


1-3. 클래스를 이용하여 객체를 생성하는 방법

객체를 생성하려면 일단 그 틀이 되는 클래스가 있어야 한다. 클래스를 만드는 코드는 아래와 같다.

클래스와 객체

클래스를 생성하는 방법으로는 앞에 class를 붙이고 뒤에 이름을 입력하면된다. 얼핏 보면 함수선언과 유사한 부분이 있지만 괄호()를 사용하지 않는게 차이점이다. 그리고 이름 맨 앞글자가 대문자인걸 확인 할 수 있는데, 함수와 헷갈리지 않기 위해 구분해놓는것이라 생각하면된다.

메서드의 매개변수(1)와 메모리 주소에 접근하는 연산자(2)

멤버 변수나 메서드를 선언하는것은 우리가 일반적으로 변수나 함수를 선언하는 것과 같다. 

 

파란 동그라미의 1번을 보면 위에 언급은 해놓았지만 매개변수가 self로 입력되어있다. 그리고 클래스 내부에서는 해당 매개변수를 찾아볼 수 없다. 그렇다면 왜 적어놓았는가?에 대한 의문이 생길 것이다. 이것에 대한 해답을 기록해 놓을까한다.

클래스 안에 있는 메서드는 해당 객체에만 필요한 알고리즘만 들어가있을것이다. 따라서 메서드의 접근 범위를 해당 메서드를 포함하고 있는 객체로 설정해놓으면 될일이다. 그러므로 메서드의 첫번째 매개변수는 해당 객체의 데이터 주소값이 되는것이다.

 

파란 동그라미 2번을 보면 (stuname.name2) 사이에 .이 들어가있는걸 볼수 있는데 이것은 하나의 연산자이며 .을 기준으로 왼쪽에 있는 변수의 데이터 주소값에 접근하여 name2라는 멤버변수나 메서드를 지정한다라는 의미로 볼 수 있다.

 

위의 내용을 정리하자면 이렇다.

  1. 멤버 메서드의 첫번째 매개변수는 해당 객체의 데이터 주소값이므로 임의의 값을 집어넣어도되지만 가독성을 위해 self로 적어주는게 일반적이다.
  2. 객체에 있는 멤버변수에 접근하려면 .연산자를 사용해야하며 .을 기준으로 왼쪽이 객체의 데이터 주소값이고 오른쪽이 멤버 변수, 메서드의 이름이다.

오늘의 OOP는 일단 여기까지 할것이다. 다음 기록은 생성자에 대해 다뤄볼까한다. 아직 배우고 있는중이라서 디테일한 부분까지는 기록해놓지 못하지만 최대한 근본적인 내용을 기록해놓을까한다. 모든것은 근본에서부터 파생되니 말이다.

이번 글에도 역시 틀리게 기록해놓은 부분이 있다면 언제든지 환영이다. 잘못된 지식을 맹신하고 있는거만큼 위험한것도 없으니 말이다.