Java 키워드
⟬ final ⟭
final은 유저에게 제한을 두기 위해 class, method, variable(member variable, local variable)에 사용할 수 있는 키워드입니다. 대상에 따라 사용되는 의미가 조금씩 달라집니다.
대상 | 의미 |
Class | 확장될 수 없는 클래스. 다른 클래스가 final 클래스를 상속할 수 없다. |
Method | 재정의 할 수 없는 메소드. final 메소드는 오버라이딩 할 수 없다. |
Variable | 값을 변경할 수 없는 변수. 일반적으로 상수의 목적으로 사용할 때 final 키워드를 사용한다. |
⟬ static ⟭
static은 특정 멤버(method, variable)가 어떤 타입의 인스턴스에 속하지 않고 그 타입 자체에 속함을 의미합니다. 즉, 클래스 안에서 static method나 static variable을 선언하게 된다면 인스턴스 별로 생성되는 것이 아니라 모든 인스턴스에서 공유되는 하나의 static member 인스턴스를 생성합니다.
⟬ abstract ⟭
abstract는 class와 method에 사용되는 non-access modifier입니다.
대상 | 의미 |
Class | abstract class는 직접 객체로 사용하지 못하고, 상속받아 사용할 수 있다. abstract method를 포함하거나 하지 않을 수 있다. |
Method | 메소드의 바디가 없이 구현된 메소드. ex) abtract void moveTo(double deltaX, double deltaY); 주로 하위 클래스에서 메소드 바디를 구현하여 사용한다. |
⟬ abstract class vs interface ⟭
abtract class는 abtract method 외에도 다른 method를 선언할 수 있고, static, final이 아닌 일반 필드들도 선언이 가능합니다. 하지만 interface는 모든 필드들이 public static final이어야 하고(상수만 선언 가능) abtract method만 선언 가능합니다.
⟬ extends vs implements ⟭
일반적으로 extends는 클래스를 상속받기 위해, implements는 인터페이스를 구현하기 위해 사용합니다. extends를 통해 클래스를 상속받으면 부모 클래스의 메소드를 오버라이딩할 수도, 하지 않을 수도 있지만 implements를 통해 인터페이스를 구현하면 인터페이스의 모든 메소드를 구현해야 합니다 (아닐 경우 클래스를 abstract로 선언). 자식 클래스는 extends로 하나의 부모 클래스만 상속받을 수 있지만, 인터페이스는 동시에 여러 개를 implements 하여 구현할 수 있습니다.
프로그래밍 개념
⟬ OOP (Object-Oriented Programming) ⟭
OOP는 컴퓨터 프로그램을 명령어의 목록, 즉 개체가 순차적으로 처리되는 절차 지향적인 프로그래밍의 관점을 벗어나 독립적으로 메시지를 주고받고 데이터를 처리하는 객체라는 단위를 두어, 하나의 프로그램을 여러 개의 객체로 구성하는 관점에서 프로그래밍 하는 것을 말한다.
OOP는 프로그램을 유연하고 변경이 쉽게 만들어 개발과 보수를 간편하게 하고 직관적인 코드 분석이 가능하게 한다.
⟬ OOP의 4가지 특징 ⟭
1. 캡슐화 (Encapsulation)
캡슐화는 데이터(필드)와 데이터가 작동하는 기능(메소드)을 객체의 단위인 클래스로 바인딩하는 것입니다.
클래스 내에 포함된 정보를 나머지 부분의 코드로 보호 장벽을 형성하는 것. 클래스가 중요 데이터에 대한 호출을 직접 허용하지 않고 메소드 등 다른 방법으로 허용한 경우 클래스가 잘 캡슐화되었다고 말합니다.
2. 추상화 (Abstraction)
인터페이스와 구현을 분리.
추상화는 시스템을 "블랙 박스"로 취급하는 것과 유사합니다. 시스템의 내부 작동을 이해하는 것이 중요하지 않도록 구현 세부 사항을 추상화하고 사용하기 쉬운 인터페이스만 제공함으로 내부적인 코드 변경의 영향을 격리하는데 도움이 됩니다.
3. 상속 (Inheritance)
객체의 단위인 클래스가 하나 이상의 부모 또는 자식 클래스를 가져 계층으로 구성될 수 있는 것을 말합니다. 한 클래스가 다른 클래스를 상속하는 경우 자동으로 해당 클래스의 기능과 속성을 가져오고 별도의 코드와 데이터로 더욱 확장할 수 있습니다. 상위 클래스의 기능을 재정의할 필요가 없기 때문에 좋은 코드의 재사용을 용이하기 만들어줍니다.
4. 다형성 (Polymorphism)
다형성이란 하나의 객체가 여러 가지 타입을 가질 수 있는 성질을 의미합니다.
- 오버라이딩(Overriding) : 상위 클래스의 메소드를 하위 클래스에서 재정의
- 오버로딩(Overloading) : 메소드의 이름이 같지만 파라미터의 타입과 개수에 따라 다른 메소드가 되도록 함
⟬ OOP의 5가지 설계 원칙, SOLID ⟭
SOLID는 객체 지향 프로그래밍의 5가지 주요 원칙인 단일 책임 원칙, 개방 폐쇠 원칙, 리스코프 치환 원칙, 인터페이스 분리 원칙 및 의존관계 역전 법칙의 약어입니다. 이 원칙을 따르면 높은 수준의 유지-보수가 쉬운 코드를 작성하고 시스템을 올바르게 설계할 수 있습니다.
1. 단일 책임 원칙 (Single Responsibility Principle, SRP)
단일 책임 원칙은 클래스 자체는 하나의 작업만 수행해야 한다는 원칙입니다. 또한 클래스를 변경할 때는 단 하나의 이유만 있어야 단일 책임 원칙을 지키는 것이라고 할 수 있습니다.
2. 개방 폐쇄 원칙 (Open-Closed Principle, OCP)
개방 폐쇄 원칙은 상속에 관한 것으로 클래스는 수정에 대해 닫혀 있어야 하고 확장에 대해 열려 있어야 한다는 것입니다. 새로운 클래스 기능은 기존의 클래스를 수정하는 것이 아니라 상속을 통해 기존 클래스에 추가되어야 합니다.
3. 리스코프 치환 원칙 (Liskov Substitution Principle, LSP)
리스코프 치환 원칙은 개방 폐쇄 원칙을 적용한 원칙으로 상위 클래스 객체를 하위 클래스의 객체로 변경해도 올바르게 동작해야 한다는 원칙입니다. 상속을 구현하는 것에 대한 것으로, 하위 클래스는 상위 클래스의 동작이나 의미를 변경할 수 없습니다.
4. 인터페이스 분리 원칙 (Interface Segregation Principle, ISP)
인터페이스 분리 원칙은 클라이언트가 자신이 이용하지 않는 메소드에 의존하지 않아야 한다는 원칙입니다. 큰 덩어리의 인터페이스들을 구체적이고 작은 단위들로 분리시킴으로 클라이언트들이 꼭 필요한 메소드들만 이용할 수 있게 합니다.
5. 의존관계 역전 원칙 (Dependency Inversion Principle, DIP)
의존관계 역전 원칙은 의존성 주입(Dependency Injection)의 핵심으로 클래스가 추상화의 구체적인 구현에 의존하는 것이 아니라 추상화 자체에 의존해야 한다는 것입니다.
⟬ 함수형 프로그래밍 (Functional Programming) ⟭
OOP는 깨끗하고 유지 관리가 쉬운 소프트웨어를 만들기 위해 객체(Object, Class)를 사용했다면, 함수형 프로그래밍은 함수(Function)를 사용하여 프로그래밍하는 패러다임입니다.
순수 함수, Pure functions
함수형 프로그래밍에서 이상적인 함수를 Pure function이라고 합니다. Pure function은 함수의 결과가 입력 값에만 의존하고, 함수의 연산이 리턴 값 외에 외부 영향을 주지 않는, 즉 Side-Effect가 없는 함수를 의미합니다.
불변성, Immutability
함수형 프로그래밍에서 Immutability는 함수 외부의 데이터를 수정하지 않는 것을 말합니다. 데이터의 수정이 필요한 경우 원본 데이터를 수정하지 않고 데이터의 복사본을 만들어 수정한 후 사용하도록 합니다.
First class fucntions, Higher-order functions
First class function은 함수를 그 자체로 독립적으로 취급될 수 있는 것으로 보고, 함수를 변수, 인자나 리턴 값으로 사용할 수 있는 것입니다. 이것이 람다 표현식에 대한 원동력이 됩니다. Higher-order function은 함수를 인자로 받거나 함수를 리턴하는 함수를 말합니다.
⟬ Call by Value vs Call by Reference ⟭
Call by Value
Call by Value는 함수의 인자로 값(value)을 넘겨주는 것을 말합니다. 함수에서는 값을 복사하여 사용하고 함수내에서 값을 변경하여도 원래의 값에 영향을 주지 않습니다.
Call by Reference
Call by Reference는 함수의 인자로 값의 주소(reference)를 넘겨주는 것을 말합니다. 함수에서는 넘어온 주소를 통해 값에 직접 접근하여 사용하기 때문에 값을 변경하면 원래의 값에 영향을 주게 됩니다.
'취업 준비' 카테고리의 다른 글
[기술 면접] 데이터베이스 개념 정리 (0) | 2022.04.18 |
---|
댓글