파이썬 클래스 사실 같은 객체지향 언어인 python의 클래스에 대한 포스팅을 한 적이 있다. 그래도 강의의 복습차 다시 기록해보려고 한다.
강의에서 클래스가 필요한 이유를 이해시키기 위해 처음에는 변수만 활용해서 학생1,2,3에 대한 정보를 print하고, 두번째는 배열을 활용해서 학생 정보를 담은 3개의 배열을 활용해서 print를 했다. 배열방식은 처음방식보단 가독성이나 효율면에서 나아졌지만, 여전히 문제를 가진다. 결국 배열이 여러개라면 여러 배열을 다 수정해야하기 때문이다. 그렇게 클래스의 필요성까지 다가간다.
클래스, 인스턴스, 객체 초보자들이 무서워하는 단어들이 나오기 시작한다. 클래스의 필요성이야 잘 이해하고 있지만 만약 더 잘 설명하려면 클래스 선언 후 해당 변수(인스턴스)가 어떻게 변화하는 지 우선 체험했으면 어떨까 싶었다. "Student" 클래스 선언 후 멤버변수로 name, age, grade를 만들게 되면 우리는 선언 전과 달리
Student student1 = new Student(); 이후에 student1.age , student1.grade, student1.name을 사용 가능하다. 생각해보면 우리는 .을 찍고 쓰는 무언가를 기초강의부터 자주 쓰긴 했다. System.out.print와 같은 코드라던지 말이다. 문자열 변수에 점을 찍어보면 인텔리제이에서 여러 메소드를 후보로 제공해준다. 문자열 변수또한 클래스로 생성된 인스턴스이며, 대부분의 우리가 쓰는 코드는 대부분 클래스로 생성된 무언가라는 것이다.
클래스를 기반으로 인스턴스(객체)를 만든다.
Student student = new Student();
Student studentObject = student
위의 코드에서 우리는 새로운 studentObject에 생성한 객체를 담는다. 이때 변수에 객체를 직접적으로 담지 않고, 객체의 참조주소(참조값)를 받는다.
Student student1 = new Student(); 실제로 다음과 같이 객체를 만든다면 우리는 student1라는 변수에 해당 객체의 메모리의 주소를 받는다.
보통 클래스는 추상화를 위한 도구이다. Student()는 .study()와 같은 메서드를 가질 수 있다. 공부를 하고 소속 학교가 있고 담당 선생님이 존재하는 "학생"이라는 개념은 추상화된 단어이다.
우리는 "학생"을 신뢰하고있다. 학생은 선생님이 있을 것, 학생은 공부를 하는 존재과 같은 일반적인 상식으로 학생 신분을 가진 사람을 신뢰한다.
우리는 우리의 메모리와 자바를 신뢰하기에 객체를 선언(통장개설)하고 참조값(통장)만 받아 필요할 때 입출금(메소드)와 같은 서비스를 이용한다. 클래스는 그렇다면 이 비유에서 "통장개설서비스"일 것이다. 우리의 클래스를 이용하면 참조값만 가지고 편리하게 필요한 메소드들을 활용 가능하다는 것이다.
이러한 은행의 통장서비스는 어떻게보면 돈관리의 추상화이다. 프로그래밍의 클래스에 의한 객체사용또한 우리는 추상화된 무언가에서 기능을 호출하는 과정이라고 생각할 수 있다.
인스턴스(객체).method(), 인스턴스(객체).멤버변수를 통해 객체를 사용한다. .(dot)
을 통해 사용한다는 것을 기억하자.
만들어진 클래스는 배열을 통해 묶어낼 수도 있다.
String[] strs = {"a", "b", "c", "d"}
와 같이 만약 Account라는 클래스를 배열에 담을 수 있다. Account[] accounts = {ac1, ac2, ac3}
와 같이 배열로 묶을 수 있다는 것이다.
배열로 묶었다면 우리는 for등을 통해 루프를 돌며 여러 클래스로 생성된 객체를 단순한 코드로 조회할 수 있다.