제가 처음 배운 언어는 C 언어입니다. 처음 배운 프로그래밍 언어이기에 너무 재밌었던 기억이 있는데요ㅎㅎ
당시 절차지향 프로그래밍인 것은 알았지만 딱히 신경쓰지 않고 공부했던 것 같습니다.
그런데 코드가 점점 길어질 수록 가독성은 떨어졌고(실력도 문제지만,,) 나중에 이 코드를 내가 읽을 수 있을까? 싶었어요ㅋㅋ,,
그러던 어느날 2학년이 되던 때 Java라는 언어를 배우며 객체지향 프로그래밍을 알게 되고 안드로이드 수업이였기 때문에 C언어 보다 더 재밌었는데요ㅎㅎ
아무래도 C언어보다 성능은 떨어지더라도 가독성이 좋아서 그런지 개발하는게 재밌었습니다.
그런 의미에서! 객체지향 프로그래밍 간단하게 알아보겠습니다.
객체지향이란?
객체지향 프로그래밍은 순차적으로 실행에 초점을 잡은 절차지향과는 다르게 객체간의 관계/조직에 초점을 두고 있습니다. ( 프로그래밍을 설계하는 것! )
마치 우리 현실 세계를 생각하면 쉬운데요! 컴퓨터 부품을 하나하나 조립해서 맞춘다는 생각하시면 됩니다.
객체지향의 특성 4가지
캡슐화
Class 안에서만 사용하고 싶은 데이터를 숨기고 Class 밖에서는 수정을 못하게 막는 방법입니다.
수정은 class 안에서만 하고 프로퍼티로 읽기 상태만 public을 만들거나, 따로 함수를 생성해서
public Get()
으로 바깥 Class가 읽을 수 있도록 합니다.
상속
미리 구현된 Class를 상속받아 기능들을 이어 받을 수 있습니다.
이 덕분에 재활용하기 편하고 가독성을 올리기 좋은 방법입니다.
다형성
- 하나의 함수 이름으로 다양한 상황에 변수를 받을 수 있는 똑같은 이름의 함수를 구현할 수 있습니다.
추상화
- 불필요한 정보 외 중요한 정보만 표현함으로써 공통의 속성과 기능을 묶어 이름을 붙이는 것입니다.
5가지 설계 원칙 (SOLID)
SRP: 단일 책임 원칙
- 클래스는 단 하나의 목적을 가져야하며, 클래스를 변경하는 이유도 단 하나의 이유여야한다.
OCP: 개발-폐쇠 원칙
확장에는 열려있고, 변경에는 닫혀 있어야 한다.
즉, 클래스를 수정해야 한다면 그 클래스를 상속(확장)하여 수정한다.
LSP: 리스 코프 치환 원칙
상위 타입 객체를 하위 타입으로 바꾸어도 동일하게 동작해야한다.
즉, 자식 클래스를 사용하는 중 부모 클래스로 치환하여도 문제가 없어야 한다.
ISP: 인터페이스 분리 원칙
- 객체는 이용하지 않는 메소드에 의존하지 않도록, 인터페이스를 분리 해야 한다.
DIP: 의존 역전 원칙
상위 클래스가 하위 클래스에 의존하면 안 된다.
추상화에 의존해야지, 구체화에 의존하면 안 된다.
객체지향은 즉흥으로 코딩하는 것보다 구현할 기능을 미리 설계하고 접근해야 막히지 않고 술술 풀리는 경우가 많습니다.
물론 설계도 잘해야 되지만 변수, 함수, 인터페이스 등 미리 구조를 생각하고 접근하면 더욱 가독성이 좋은 코딩이 될 수 있을 것이라 생각합니다.
저는 개인적으로 성능보단 가독성을 중요시 생각하는데요!
협업에서도 중요하지만 내 미래의 자신이 읽어도 이해가 될 정도로 잘 짜야지 그것이 좋은 코딩인 것 같습니다 :D