java
-
다형성(Polymorphism)이란?Design Pattern/객체지향 2024. 4. 12. 21:51
다형성은 객체지향 프로그래밍의 중요한 특징 중 하나로, 다양한 클래스의 객체를 동일한 방식으로 처리할 수 있게 해줍니다. 이 글에서는 Java와 Go의 다형성을 비교하면서, 어떻게 이 개념이 각 언어에서 구현되고 사용되는지 탐구해보겠습니다. 1. 다형성이란 무엇인가? 다형성(Polymorphism)은 그리스어로 '많은 형태'를 의미합니다. 프로그래밍에서는 하나의 인터페이스를 가지고 다양한 형태의 객체들이 해당 인터페이스를 구현할 수 있도록 하는 기능을 말합니다. 이를 통해 코드의 유연성과 재사용성을 증가시킬 수 있습니다. 2. Java에서의 다형성 Java에서 다형성은 주로 인터페이스와 추상 클래스를 통해 구현됩니다. 이들을 사용하여 다양한 클래스가 같은 인터페이스를 공유할 수 있고, 이 인터페이스 타입..
-
상속(Inheritance)이란?Design Pattern/객체지향 2024. 4. 12. 21:46
상속은 객체지향 프로그래밍(Object-Oriented Programming, OOP)의 핵심 원칙 중 하나로, 코드 재사용성을 높이고, 복잡성을 관리할 수 있게 돕습니다. 하지만, 잘못 사용하면 유지보수의 어려움을 초래할 수 있습니다. 이 글에서는 Java와 Go 언어를 통해 상속의 개념을 설명하고, 상속의 사용을 피해야 하는 이유에 대해서도 논의해 보겠습니다. 1. 상속이란 무엇인가? 상속은 한 클래스(부모 클래스)의 속성과 메서드를 다른 클래스(자식 클래스)가 받아 사용할 수 있게 하는 기능입니다. 이를 통해 공통의 코드를 재사용하고 확장할 수 있으며, 계층적인 클래스 구조를 만들어 관리할 수 있습니다. 2. Java에서의 상속 Java에서는 extends 키워드를 사용하여 클래스 간 상속을 구현합..
-
추상화(Abstraction)란?Design Pattern/객체지향 2024. 4. 12. 21:36
객체지향 프로그래밍에서 추상화는 코드의 복잡성을 관리하고, 재사용성을 높이며, 유지 보수를 용이하게 하는 핵심 기술입니다. 본 블로그 게시글에서는 추상화의 개념을 이해하고, Java와 Go 언어에서의 구현 방법을 비교하여, 왜 추상화가 중요한지에 대해 자세히 설명하겠습니다. 추상화란 무엇인가? 추상화는 복잡한 현실 세계를 단순화하여 프로그램 내에서 이해하고 사용하기 쉽게 만드는 과정입니다. 이를 통해 개발자는 불필요한 세부 정보를 숨기고 중요한 정보만을 강조하여, 프로그램 간의 상호 작용을 개선할 수 있습니다. 추상화는 프로그래밍에서 모듈성을 높이고, 오류 가능성을 줄이며, 팀 작업을 용이하게 합니다. Java에서의 추상화 - 초급 Java에서는 추상화를 abstract 클래스와 interface를 통해..
-
DI(Dependency Injection)란?Design Pattern/생성 디자인 패턴 2024. 4. 11. 12:53
종속성 주입(Dependency Injection, DI)은 소프트웨어 설계 패턴 중 하나로, 코드를 더 유연하고 테스트하기 쉽게 만들어줍니다. 이 패턴은 개발자가 프로젝트에 필요한 서비스나 모듈을 직접 생성하고 관리하지 않아도 되게 해 줍니다. 대신, 이러한 서비스나 모듈은 필요할 때 외부에서 '주입'되어 사용됩니다. 이렇게 함으로써, 코드 간의 결합도가 낮아지고, 유닛 테스트와 코드 재사용성이 향상됩니다. 예를 들어, 어떤 애플리케이션에서 데이터베이스 접근 로직이 필요하다고 해봅시다. 종속성 주입을 사용하지 않는 경우, 해당 로직을 필요로 하는 각 클래스 내에서 데이터베이스 연결을 직접 생성하고 관리해야 합니다. 하지만 DI를 사용하면, 데이터베이스 접근 로직을 구현한 클래스(서비스)를 애플리케이션의..
-
캡슐화(encapsulation)란?Design Pattern/객체지향 2024. 4. 10. 23:22
캡슐화는 객체 지향 프로그래밍(OOP)의 네 가지 주요 원칙 중 하나로, 데이터(객체의 상태)와 데이터를 조작하는 메소드를 하나로 묶는 것을 말합니다. 1. 캡슐화란? 캡슐화는 객체의 세부 구현 내용을 숨기고, 사용자에게는 필요한 기능만을 제공하는 기술입니다. 즉, 객체의 데이터를 직접적으로 접근하는 대신 메소드를 통해 접근하게 함으로써 데이터의 무결성을 유지할 수 있습니다. 이를 통해 객체의 구현과 사용을 분리하고, 변경에 유연하게 대응할 수 있는 코드를 작성할 수 있습니다. 2. 캡슐화 코드 예시 JAVA public class Employee { private String name; private int age; private double salary; public Employee(String na..
-
인스턴스(Instance)란?Design Pattern/객체지향 2024. 4. 10. 20:49
인스턴스(instance)는 객체 지향 프로그래밍(OOP)의 핵심 개념 중 하나로, 클래스로부터 생성된 객체를 의미합니다. 클래스는 객체의 설계도 같은 역할을 하며, 인스턴스는 이 설계도를 바탕으로 생성된 실체를 말합니다. 클래스 정의에 따라 메모리에 할당된 인스턴스는 실제 프로그램에서 사용되는 데이터와 메서드(함수)를 포함합니다. 인스턴스를 통해 클래스에 정의된 속성과 기능을 실제로 사용할 수 있습니다. 인스턴스의 특징 유일성: 하나의 클래스로부터 여러 인스턴스를 생성할 수 있으며, 각 인스턴스는 독립된 메모리 영역을 가지고 서로 다른 상태를 유지할 수 있습니다. 클래스와의 관계: 인스턴스는 특정 클래스의 구조를 따르며, 해당 클래스의 속성(attribute)과 메서드(method)를 가지게 됩니다. ..
-
기아상태(Starvation)란?Computer Science/OS 2024. 4. 6. 17:22
기아상태(Starvation)는 멀티스레딩 환경에서 특정 스레드가 CPU 시간이나 필요한 자원을 충분히 할당받지 못해 원하는 작업을 수행하지 못하는 상태를 말합니다. 이는 일반적으로 우선순위가 높은 작업에 자원이 계속 할당되어 우선순위가 낮은 작업이 무한히 대기 상태에 머무르게 될 때 발생합니다. 1. 기아상태란? 기아상태는 시스템 내의 자원 할당 정책으로 인해 발생할 수 있습니다. 예를 들어, 특정 스레드나 프로세스가 자원을 오랜 시간 동안 독점하고 있을 때, 다른 스레드는 그 자원을 사용할 기회를 얻지 못할 수 있습니다. 특히, 멀티스레딩 환경에서 스레드에 우선순위를 할당하여 작업을 스케줄링할 때 기아상태가 발생하기 쉽습니다. 2. 기아상태 코드 예시 Java 예시: Java에서는 Thread 클래스..
-
컴파일(Compile)과 런타임(Runtime)이란?Computer Science/OS 2024. 4. 5. 10:04
1. 컴파일이란? 컴파일은 고수준 프로그래밍 언어로 작성된 코드를 기계가 이해할 수 있는 저수준 언어(보통 기계어나 바이트코드)로 변환하는 과정을 말합니다. 컴파일러는 이러한 변환 과정을 수행하는 프로그램입니다. 컴파일 과정은 일반적으로 여러 단계를 거칩니다. 소스 코드가 토큰으로 분해되고, 구문 분석을 통해 구문 트리가 생성되며, 최적화가 수행되고, 마지막으로 타겟 코드(기계어 코드)가 생성됩니다. 2. 런타임이란? 런타임은 프로그램이 실행되고 있는 시간을 의미합니다. 더 구체적으로는, 프로그램의 코드가 컴퓨터의 프로세서에 의해 실행되고 있는 상태를 말합니다. 런타임 동안, 프로그램은 메모리를 할당받고, 데이터를 처리하며, 사용자의 입력을 받고, 결과를 출력할 수 있습니다. 런타임 환경은 프로그램이 실..