간단한 객체 지향 프로그래밍 개념

Kangho LEE·2021년 4월 14일
1

어제와 이틀전은 거의 과제로 시간을 보냈습니다.. 과제... 너무 많아....
과제 양도 많긴 했지만 코딩테스트를 확실히 잘 본것은 아니여서 신경도 많이 쓰여서 집중을 잘 하지 못했습니다. 생각보다 난이도가 있었고 시험은 4문제가 나왔고 확실하게 맞은 부분은 2.5개입니다. (맞다는 것도 제 추측이긴 하지만..) 합격 할 거 같긴 하지만 이 불안함은 어쩔 수 없는 것 같습니다 ㅠㅠ

그래도 그냥 붙었다고 생각하고 미리 면접준비와 중간고사 공부를 공부했습니다.

객체 지향 프로그래밍

오랜만에 객체지향 프로그래밍을 복습했습니다. 1학년 때 들었을 때는 지금처럼 다양한 생각보다는 따라가기 급급했는데 역시 여러번 복습을 하면 할 수록 다양한 생각과 더 깊은 이해가 가능한 것 같습니다.

객체 지향 프로그램이란?
한 문장으로 표현한다면 객체를 정의하고 제공하는 기능을 구현하고 각 객체간 소통을 구현하는 것이 객체지향 프로그래밍입니다.

객체지향 프로그램은 종종 절차지향과 비교가 많이 되곤합니다. 절차 지향은 컴퓨터가 계산하는 순서로 작성되었기 때문에 빠르다는 장점이 있지만 순서가 변경되면 안된다는 점, 코딩하기 어렵다는 단점이 있습니다.
객체지향 프로그래밍은 이런 단점을 보완해 줍니다.

멤버변수 - 객체의 속성입니다.

메서드 - 객체의 기능 부분으로 클래스 내부에 선언되어 있는 함수를 뜻합니다.

참조 값 - 인스턴스가 할당되어 있는 힙의 메모리 주소입니다. new 로 생성하고 힙에 할당된 주소가 반환됩니다.

인스턴스 - 객체를 생성할 때에 힙으로 할당되는 데이터 입니다. 자바의 new나 c의 malloc 과 같은 동적 메모리에 할당이 되는 부분입니다. 각 데이터는 멤버 변수를 다르게 가지고 있기 때문에 독립적인 공간인 heap에 할당이 됩니다.

가비지 컬렉터 - 자바에서 힙에 할당된 인스턴스가 사용중인 메모리를 다시 사용할 수 있게 비워주는 역할을 합니다. 주기적으로 사용이 안되는 인스턴스를 자동으로 제거해 줍니다.

생성자 - 객체를 인스턴스로 만들어주는 역할을 합니다. 클래스내부에서 만들지 않으면 자동으로 기본 생성자가 지정됩니다. 기본 생성자는 void 값을 반환 값으로 가지고 있으며 멤버 변수에 각 자료형에 맞는 기본 값들을 넣어주게 됩니다. (int 0, String null, etc...)

오버로딩 - 생성자나 메서드를 같은 이름이지만 다양하게 사용할 수 있게 매개 변수를 통해 구분해주는 것을 말합니다. 기본 생성자와 다른 커스텀 생성자를 동시에 사용할 수 있는 것은 오버로딩 때문입니다.

참조 자료형 - String, Date, Student와 같이 원시 자료형(int, char, float, double)과 다른 class를 통해 선언되는 자료형을 말합니다. 원시 자료형과 가장 큰 차이점은 참조 자료형은 객체에 따라 다른 크기를 가진다는 것, 또한 사용전에 꼭 생성해야한다는 차이점이 있습니다. (String은 예외)

접근 제어 지시자 - 자바에서 데이터를 보호를 위해 자료형 앞에 쓰이는 선언입니다. 4가지가 있으며 public, protected, 아무것도 없는 것(default), private 이 있습니다.

public - 모두가 접근 및 사용 가능
ptrotected - 같은 패키지, 상속 관계에 있을 때 수정 및 읽기 가능
default - 같은 패키지
private - 같은 클래스 내에서만 가능 -> get(), set() 메서드를 따로 제작을 해야 값에 접근 할 수 있습니다.

그럼 왜 우리는 이런 private을 만들었을까요? 우리는 객체에 유효한 값을 넣고 싶습니다. 만약 월 정보를 넣어야 하는데 13이 들어가는 경우 오류를 뱉어야 합니다. 하지만 메서드를 거치지 않고 그냥 date.month = 13; 을 넣게 된다면 잘못된 데이터가 들어가 버립니다. 그래서 메서드 내에서만 데이터를 수정하고 읽을 수 있게 만드는 것입니다. 이런 private을 통해 자료의 일관성을 보장해 주는 것이 정보 은닉입니다.

전에는 운영체제를 배운 상태가 아니었기 때문에 스택과 힙의 차이를 잘 모르고 공부했었습니다. 지금은 아 왜 인스턴스는 힙에 들어가고 스택에는 메서드가 실행되는 것인지에 대한 이해를 하고 공부하니 더 기억에 남는 것 같습니다. 또한 접근 제어지시자에 대한 생각도 많이 달라졌습니다.
많은 프로젝트를 거치고 나서는 굉장히 장점중 하나 이구나라나는 생각이 들었습니다. django의 form처럼 자료형과 데이터 값의 유효성을 굉장히 유연하고 쉽게 넣을 수 있을 거 같다는 생각이 들었습니다.

profile
우유와 누텔라

0개의 댓글