사람들마다 좋은 코드의 기준이 다르겠지만 제가 생각하는 좋은 코드란 "읽기 쉬운 코드", 그리고 "중복이 없는 코드"라고 생각합니다.
👉읽기 쉬운 코드란?
읽기 쉬운 코드는 개개인 또는 집단마다 기준이 다르다고 생각합니다. 개인이라면 자신이 작성한 코드를 다시 봐도 이해하기 쉬운 코드일 것이고 집단이라면 집단 내에서 정한 코딩 규칙을 준수한 코드일 것입니다.
물론 주석을 제대로 작성하면 코드를 읽기 쉬운 코드일 수도 있지만 코드 갱신과 주석 갱신이 같이 이루어 지지 않는다면 불확실한 정보를 전달할수도 있습니다.
👉중복이 없는 코드란?
같은 기능을 하는 코드가 여러곳에 존재한다면 우선 코드의 길이가 길어지기 때문에 코드를 읽는데 걸리는 시간이 늘어나는 "코드량 증가", 그리고 기능을 수정할때 모든 코드의 동일성을 유지하기 힘든 "중복 코드 동일성"문제가 발생할수 있습니다.
객체 지향 프로그래밍은 현실의 객체를 프로그램으로 옮겨와 상태와 행위를 가진 객체를 생성해 프로그래밍하는 기법입니다.
장점: 재사용성이 뛰어나고 유지보수하기 쉽다.
단점: 개발속도, 실행속도가 느리다.
자바, 오브젝트-C, C++, C#, 파이썬
👉캡슐화
코드를 외부로 노출시키지 않는다.
데이터를 외부에서 직접 접근하지 않고 getter,setter를 통해서만 접근할수 있다.
👉추상화
불필요한 정보는 숨기고 중요한 정보만 표현하는 것입니다. 공통의 속성이나 기능을 묶어놓은 추상메소드나 인터페이스가 있습니다.
👉다형성
변수나 메소드가 상황에 따라 다른 결과를 나타내는것을 의미합니다.
오버로딩(Overloading), 오버라이딩(Overriding)을 사용합니다.
오버로딩이란 메소드의 이름은 같지만 파라미터를 다르게 받는것을 의미합니다.
오버라이딩은 부모 클래스에서 상속받은 메소드를 자식 클래스에서 재정의 해서 사용하는 것을 의미합니다.
👉상속성
부모 클래스를 자식 클래스에서 이어 받아 사용할수 있게 하고 부분적인 기능을 수정해서 사용할수 있게 하는 것입니다.
👉S (SRP : Single Responsibility Principle)
한 클래스는 하나의 책임만 가져야 한다.
👉O (OCP : Open/Closed Principle)
기존 클래스의 확장에는 열려있으나, 기존 클래스 변경에는 닫혀있어야 한다.
👉L (LSP : Liskov’s Substitution Principle)
프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
쉽게 말하면 자식 클래스를 부모 클래스 자리에 넣어도 제대로 동작해야하는 것을 의미한다.
👉I (ISP : Interface Segregation Principle)
특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
이것은 큰 인터페이스들을 작은 단위로 분리해서 꼭 필요한 메소드만 이용할수 있게하는 것이 핵심이다.
👉D (DIP : Dependency Inversion Principle)
추상화에 의존한다.
구체화에 의존하면 안된다.
상위 클래스는 하위 클래스에 종속되면 안되는 원칙입니다.
함수형 프로그래밍은 문제를 순수 함수로 해결하는 프로그래밍 기법입니다.
작은 문제를 해결하기 위해 함수를 작성하여 재사용성과 가독성을 높이고 유지보수를 용이하게 해줍니다.
함수형 프로그래밍은 아래와 같은 원칙이 있습니다.
- 프로그래밍은 입출력이 순수해야한다. (순수함수)
- 부작용이 없어야한다.
- 함수와 데이터를 중심으로 생각한다.
순수함수란 한개 이상의 파라미터를 받아서 파라미터만으로 결화물을 반환해주는 함수를 의미합니다.
부작용이 없다는 것은 원본 데이터는 불변(immutable)해야하는 특성입니다. 만약 변경되어야 한다면 새로운 객체를 생성해 변경된 값을 대입해서 변경해야 합니다.