전체 글 73

[Java] 인터페이스(Interface)

인터페이스(Interface) 인터페이스란 객체와 객체를 연결하는 접속부 역할을 하는 요소를 뜻합니다. 인터페이스는 구체화 되지 않은 객체로 추상 클래스와 유사한 특성을 가지고 있습니다. 인터페이스는 필요에 따라 연결된 객체를 다른 객체로 교체해야할 때 유용하게 쓰입니다. 인터페이스를 사용하기 위해서는 다른 클래스에서 구현(상속)하여 사용해야 합니다. 이 때 인터페이스에서 선언한 메서드의 선언부는 구현되는 클래스에서 반드시 완성되어야 합니다. 따라서 같은 인터페이스를 구현한 클래스는 인터페이스를 통해 상황에 맞춰 오버라이딩 된 메서드를 호출할 수 있게 됩니다. 구현 해야 할 메서드들이 미리 선언되어 있기 때문에 이를 구현하는 클래스의 사용법을 가이드 해줄 수 있습니다. 또한 인터페이스는 추상 클래스와 달..

[Java] 인터페이스의 상속 및 다형화(Interface Inheritance & Polymorphism)

인터페이스의 다중 구현 먼저 인터페이스는 하위 클래스에서 여러 개의 인터페이스를 구현(implements)할 수 있습니다. 일반적으로 인터페이스는 구체화되는 메서드가 없기 때문에 다중 구현을 해도 문제가 발생하지 않습니다. 하지만, 인터페이스에 기본 메서드가 구현되어있고, 다중 구현을 통해 중복되는 상황이라면, 구현 클래스에서 반드시 이를 재정의 해주어야 합니다. 인터페이스 다중 구현 방법 // 다중 구현 인터페이스는 콤마(,)로 구분 public class 클래스이름 implements 인터페이스이름1, 인터페이스이름2, ... { 구현되는 인터페이스 재정의 필요 } 인터페이스 다중 구현 예시 public interface Walkable { void startWalk(); void stopWalk()..

[Java] 추상 제어자와 추상 클래스(Abstract Modifier & Abstract Class)

추상 클래스(Absract Class) 추상 클래스는 분류가 비슷한 클래스들의 공통적인 속성과 기능을 추출하여 선언한 클래스입니다. 즉, 부모 클래스로 활용하기 위하여 만들어지는 미완성된 클래스입니다. 이런 이유로 추상 클래스는 스스로 객체를 만들어낼 수 없고, 상속을 통해서만 실체화 할 수 있습니다. 추상 클래스도 일반 클래스와 같이 필드, 컨스트럭터, 메서드를 멤버로 가질 수 있습니다. 하지만 추상 클래스는 반드시 하나 이상의 추상 메서드를 포함해야만 합니다. (반대로 하나라도 추상 메서드가 존재한다면 해당 클래스는 반드시 추상 클래스로 선언해야 함) 추상 클래스로부터 상속 받는 미완성 메서드는 자식 클래스에서 반드시 구현(오버라이딩)해야 합니다. (단 자식 클래스도 추상 클래스로 선언되는 경우 예외..

[Java] 클래스의 추상화(Abstraction)

추상화(Abstraction) 기존 클래스들의 공통적인 요소를 뽑아 상위 클래스를 만들어 정의하는 것을 뜻합니다. 오브젝트와 관계된 성질이나 특성 중 본질적인 공통점을 찾아 추출하여 개략적으로 작성하고 그 외의 요소는 생략합니다. 이후 추상화된 클래스를 상속 받는 클래스에서 생략된 내용을 구체화합니다. 이에 따라 추상화된 클래스는 다음과 같은 특징을 갖게 됩니다. 상속 계층에서 상위에 위치 할 수록 추상화의 정도가 높고, 아래로 내려갈수록 구체화의 정도가 높아집니다. 상층부일수록 공통적인 속성과 기능들이 정의되며, 하층부일 수록 세부적인 속성과 기능들이 정의됩니다. 추상화를 사용하는 이유는 아래 3가지로 정리할 수 있습니다. 추상화는 시스템 구축 전 아직 만들어지지 않은 시스템의 구조과 구성을 가시적으로..

[Java] 오버로딩(Overloading)

오버로딩(Overloading) 오버로딩이란 한 클래스 내에 같은 이름을 가진 컨스트럭터나 메서드를 2가지 이상의 형태로 선언하는 것을 의미합니다. 동일한 이름의 컨스트럭터나 메서드의 매개 변수를 다른 자료형으로 선언하거나 개수 혹은 선언 순서를 다르게 선언하여 오버로딩 시킬 수 있습니다. 이를 통해 하나의 메서드로도 다양한 경우에 대응할 수 있도록 설정할 수 있습니다. 오버로딩을 통해 비슷한 기능을 가진 다른 이름의 컨스트럭터나 메서드가 생성되는 것을 막아 코드의 가독성을 높을 수 있습니다. 오버로딩은 크게 컨스트럭터 오버로딩과 메서드 오버로딩으로 구분됩니다. 컨스트럭터 오버로딩(Constructor Overloading) 컨스트럭터 오버로딩은 같은 이름의 컨스트럭터를 2가지 이상의 형태로 선언하는 것..

[Java] 클래스의 다형화(Polymorphism)

다형성(polymorphism) 다형성이란 클래스나 클래스의 멤버가 다양한 형태를 가지는 것을 의미합니다. 범용으로 사용되는 기능을 여러 가지 경우의 수에 맞춰 활용할 수 있게 만들어 줍니다. 중복되는 기능 구현 시 코드의 길이를 줄여 보다 편리하고 효과적으로 프로그래밍 할 수 있게 해줍니다. 또한 유사한 변수나 기능 구현 시 변수 이름이나 메서드 이름이 복잡해지는 것을 방지할 수 있습니다. 클래스 단위에서의 다형성 활용 클래스에 다형성을 적용하여 한 타입의 참조 변수를 통해 여러 타입의 클래스나 인스턴스를 참조할 수 있도록 설정할 수 있습니다. 이를 통해 하나의 클래스도 필요에 따라 상위, 하위 클래스로 변형하여 상황에 따른 여러 결과가 나올 수 있도록 설정할 수 있습니다. 컨스트럭터, 메서드 단위에서..

[Java] 오버라이드(Override)

오버라이드(Override) 부모 클래스의 메서드를 상속하면 자식 클래스에서 메서드를 바로 사용할 수 있습니다. 하지만 상황에 따라서 부모 클래스의 메서드가 자식 클래스에서 사용하기 적합하지 않을 수 있습니다. 자바에서는 이 경우 부모 클래스의 메서드를 자식 클래스에서 재정의하여 사용할 수 있도록 메서드 오버라이드라는 기능을 지원하고 있습니다. 메서드 오버라이드 메서드 오버라이드는 부모 클래스로부터 상속받은 메서드와 동일한 이름의 메서드를 자식 클래스에서 재정의해서 사용하는 것을 뜻합니다. 유사한 기능의 메서드를 재정의하여 사용함으로써 코드의 중복을 줄이고, 메서드 종류를 단순화 시켜줍니다. 메서드가 오버라이딩 되면 가상 메서드 기법에 의해 부모 클래스의 메서드는 가려지고 자식 클래스의 메서드가 우선되게..

[Java] 논리 연산자(Logical Operators)

비교 연산자(Relation Operators) 비교 연산자는 두 개의 피연산자의 대소나 동등 여부를 확인하여 boolean 타입으로 반환하는 연산자입니다. 비교 연산자는 제어문에서 실행의 흐름을 제어할 때 주로 사용됩니다. 연산자의 종류 [피연산자1] == [피연산자2] : 피연산자1과 피연산자2가 같은지 확인 [피연산자1] != [피연산자2] : 피연산자1과 피연산자2가 다른지 확인 [피연산자1] = [피연산자2] : 피연산자1이 피연산자2보다 더 크거나 같은지 확인 논리 연산자(Logical Operators) 논리 연산자는 논리곱(AND), 논리..

[Java] 클래스 형 변환(Class Casting)

클래스의 형 변환 기본 자료형간의 형 변환이 가능한 것처럼 참조 타입간에도 형 변환이 가능합니다. 클래스는 서로 상속 관계에 있을 경우 형 변환을 할 수 있으며 자동, 수동 형 변환을 지원합니다. 기본 자료형과 마찬가지로 더 작은 범위의 자료형에서 큰 범위의 자료형으로, 간략한 자료형에서 세밀한 자료형으로의 형 변환은 자동으로 지원되며, 반대의 경우는 수동으로 변환해야 합니다. 클래스 자동 형변환: 프로그래머가 별도로 작업하지 않아도 자동으로 형변환이 되는 방식으로 자식 클래스가 부모 클래스로 타입 변환을 할 때 지원됩니다. 클래스 수동 형변환: 프로그래머가 별도로 작업을 해주어야 형 변환이 가능한 방식으로 부모 클래스에서 자식 클래스로 형 변환을 하는 경우가 해당 됩니다. 자동 형 변환(Promotio..

[Java] 클래스 상속(Inheritance)

상속성(Inheritance) 상속이란 상위 클래스의 성질과 기능, 즉 멤버를 하위 클래스에게 내려주는 것을 뜻합니다. 기존에 만들어진 클래스와 비슷한 특성이나 성질을 가진 클래스를 만들어야 할 때 상속을 이용하여 개발 편의를 높일 수 있습니다. 클래스의 상속을 사용하는 이유는 다음과 같습니다. 하위 클래스에서 상위 클래스의 속성과 메서드를 다시 정의하지 않고도 사용 가능 상속을 통해 상위 클래스의 코드를 재사용하여, 보다 적은 양의 코드로 새로운 클래스를 생성 상속을 통해 객체를 다형적으로 표현 가능 자바에서 클래스 상속을 사용하는 방법은 아래와 같습니다. 9클래스의 선언부 뒤에 extends 예약어를 사용하여 상속을 표현합니다. (자식 클래스를 먼저 선언하고 특성을 이어받을 부모 클래스를 선정하는 방..

[Java] 정적 & 불변 제어자(Static & Final Modifier)

클래스 멤버의 메모리 저장 방식 클래스의 인스턴스가 생성되면 스택 메모리에 변수와 인스턴스가 생성된 힙 메모리의 주소가 생성되며, 힙 메모리에는 인스턴스의 데이터들이 저장됩니다. 클래스의 필드 데이터는 생성된 인스턴스마다 값이 다를 수 있지만, 메서드는 인스턴스가 달라도 같은 기능을 가지게 됩니다. 동일한 기능을 수행하는 메서드 코드가 여러 인스턴스에 중복하여 저장되면 메모리를 불필요하게 낭비하는 셈이 되기 때문에 JVM에서는 이를 메서드 영역(= 클래스 영역) 이라는 별도의 메모리 공간을 나눠 저장하고 있습니다. 또한 이렇게 별도로 저장된 메서드를 호출할 때 인스턴스가 생성되지 않으면 호출될 수 없도록 제한을 걸어놓고 있습니다. 정적 제어자(Static Modifier) 정적(static) 제어자는 클..

[Java] 접근 제어자(Access Modifier)

제어자(modifier) 제어자란 클래스와 클래스의 멤버 선언 시 부가적인 의미를 추가하는 예약어(키워드) 입니다. 제어자는 크게 접근 제어자와 그 외 제어자로 나누어 볼 수 있습니다. 접근 제어자: 클래스에서 생성되는 인스턴스의 값을 외부에서 변경하거나 호출할 수 있는 조건을 제어할 때 사용됩니다. 기타 제어자: 클래스에 다양한 의미를 부여해주는 여러가지 예약어들입니다. (static, final, abstract, native, transient, synchronized, volatile, strictfp 등) 제어자는 목적에 따라 다양한 예약어들을 조합하여 사용할 수도 있습니다. 접근 제어자(Access Modifier) 접근 제어자는 public, protected, (default), priva..

[Java] 클래스의 캡슐화(Encapsulation)

캡슐화(encapsulation) 캡슐화란 클래스의 구성 요소를 마치 캡슐처럼 하나의 단위로 포장하여 관리하는 것을 뜻합니다. 이를 통해 클래스 안에 관련된 속성과 기능을 외부로부터 보호할 수 있게 됩니다. 외부에서 클래스의 내부 정보에 대해 직접 접근하거나, 직접 변경할 수 없도록 설계합니다. 클래스가 제공하는 메소드를 통해서만 필드에 접근이 허용됩니다. 클래스를 캡슐화 하는 이유는 아래와 같습니다. 내부적으로만 사용되는 데이터의 불필요한 외부 노출을 방지 데이터를 무작위한 변경으로부터 보호 유지 보수나 확장 시 오류의 범위를 최소화 정보의 은닉(Data Hiding) 캡슐화에서 가장 핵심적인 개념으로, 다른 클래스에게 자신의 정보를 숨기고 자신의 메서드를 통해서만 접근을 허용합니다. 이를 통해 외부로..

[Java] 자바 배열의 복사(Arrays Copy)

배열의 복사 배열은 한번 생성하면 크기의 변경이 불가능합니다. 때문에 프로그램 중간에 배열의 크기가 변경되어야 한다면, 더 큰 배열을 생성한 후 복사하는 방법을 사용해야 합니다. 배열은 내부에 저장되는 자료형이 기본 타입인가, 참조 타입인가에 따라서 저장이 다르게 되기 때문에 복사에서도 이를 유의해야 합니다. 배열을 복사하는 방법은 크게 두 가지 방법으로 나뉩니다. 얕은 복사: 실제 배열의 데이터값이 저장된 값의 주소를 복사하여 활용 깊은 복사: 복사한 배열의 데이터값을 완전히 다른 객체에 새로 생성하여 활용 얕은 복사(shallow copy) 얕은 복사를 할 경우 데이터의 주소값을 복사하기 때문에 실제로 힙메모리에 저장되는 데이터는 동일하게 활용합니다. 다른 배열을 선언한 후 그냥 다른 배열의 값에 직..

[Java] 연산 우선 순위(Operation Priority)

연산 우선 순위 연산자는 상호간 연산 우선 순위가 정해져있습니다. 우선순위가 같은 연산자끼리 연산을 하게 될 경우 왼쪽에서 오른쪽 방향으로 연산하게 됩니다. 연산의 방향 대부분의 연산자는 왼쪽에서 오른쪽 방향으로 연산을 수행합니다. 다만 대입 연산자, 증감 연산자, 부호 연산자, 논리 연산의 NOT 연산은 오른쪽에서 왼쪽 방향으로 연산을 수행합니다. 연산 우선 순위 및 연산 방향 표 정리 연산 우선 순위 연산자 연산 방향 높음 ↑ | | | | | | | | | | | | | | | | ↓ 낮음 증감(++, --), 부호(+, -), 논리(!, ~) ← (오른쪽에서 왼쪽으로) 산술(*, /, %) → (왼쪽에서 오른쪽으로) 산술(+, -) → (왼쪽에서 오른쪽으로) 쉬프트(, >>>) → (왼쪽에서 오른..

[Java] 자바의 참조 자료형(Reference Data Type)

참조 자료형 참조 자료형은 객체의 주소를 참조하는 자료형으로 배열, 클래스, 인터페이스, 열거형 등이 있습니다. 배열(array): 같은 타입의 데이터 여러 개를 한 단위로 묶어서 저장하는 자료형입니다. 클래스(class): 특정 사물이나 개념을 프로그램으로 표현하기 위한 데이터와 함수의 집합체를 뜻합니다. 인터페이스(interface): 클래스 개념을 추상화하여 최소한의 기능만 기술한 추상 자료형입니다. 열거형(enum): 특정 상수를 묶어서 저장하는 자료형입니다. 자바에서 제공하는 8개의 기본 자료형(byte, short, int, long, char, float, double, boolean)을 제외한 모든 타입은 참조 자료형입니다. 기본 자료형과 참조 자료형의 차이 기본 자료형과 참조 자료형의 차..

[Java] 자바 문자열 타입(String Type)

문자열 타입 문자열은 문자를 연결한 단어나 문장 형태를 저장하기 위한 타입입니다. 자바의 문자열은 String 클래스의 객체를 만드는 방식으로 생성됩니다. 자바에서 문자열 타입은 2가지 방법으로 생성할 수 있습니다. (두 가지 방식 모두 메모리에 저장되는 방식은 동일하지만 String 클래스의 특징으로 인해 활용에 조금의 차이가 발생) String 타입 객체 생성 // String 타입 객체 생성 첫 번째 방법 // 변수 선언과 같이 타입, 변수명 명시 후 값 대입 // 문자열 타입의 값은 반드시 큰따옴표("") 안에 표기 String 변수명 = "저장 할 문자열"; // String 타입 객체 생성 두 번째 방법 // new 키워드를 통해 객체 생성 string 변수명 = new String("저장 할..

[Java] 자바의 분기문(Branching Statements)

break문 break문은 조건문이나 반복문을 중지하거나 종료할 때 사용합니다. 특정 조건에 반복을 멈추게 만들기 위해 if문과 함께 사용되는 경우가 많습니다. break문 사용 예시 // i가 5와 같아지면 반복을 멈추는 프로그램 public class BreakExample { public static void main(String[] args) { while(true) { int i = 1; System.out.println(i); i++; if(i == 5) { break; } } } } continue문 continue문은 반복문 내에서 사용되며, 반복문의 종료 없이 반복을 건너뛸 때 사용합니다. 특정 조건의 반복을 건너뛰게 만들기 위해서 if문과 함께 사용되는 경우가 많습니다. continue..

트랜잭션(Transaction)

트랜잭션(Transaction) 트랜잭션(Transaction)의 정의 하나의 논리적 단위를 구성하는 데이터베이스 연산의 묶음(유닛) 각 트랜잭션은 하나의 특정 작업으로 시작하여 묶여있는 모든 작업들을 완료해야만 종료됨 동시에 여러 트랜잭션이 수행되기 위해서는 데이터베이스의 일관성이 보장되어야하며 이를 위해 트랜잭션 관리 모듈을 활용 트랜잭션 관리 모듈 동시성 제어 모듈(Concurrency Control Module): 데이터베이스의 일관성을 유지하기 위해 동시에 수행되는 트랜잭션들 사이의 상호작용을 제어 회복 제어 모듈(Recovery Control Module): 데이터베이스의 일관성을 유지하기 위해 업데이트를 하는 동안 시스템 장애에도 데이터베이스의 기존 상태를 유지 트랜잭션 스케줄링 여러 트랜잭..

Database 2022.06.13

데이터베이스 관리 시스템(Database Management System)

데이터베이스 관리 시스템(DataBase Management System) DBMS의 정의 데이터베이스를 생성하고, 데이터를 저장, 수정, 삭제 등 데이터베이스를 관리할 수 있는 응용 프로그램 DBMS의 주요 기능 중복 제어: 동일한 데이터가 여러 위치에 중복해서 저장되는 것을 방지하여 데이터의 일관성을 유지 무결성 제약 조건: 데이터의 무결성 제약조건을 정의/검사 하는 기능을 통해 데이터의 무결성을 유지 접근 통제: 사용자마다 다른 접근 권한을 부여하여 데이터의 접근을 제어함으로써 보안성을 유지 인터페이스 제공: CLI, GUI 등의 데이터베이스를 다룰 수 있는 인터페이스 제공 관계 표현: 서로 다른 데이터간의 다양한 관계를 표현할 수 있는 기능 제공 백업: 데이터의 복제본을 저장해두어 만일의 사태에 ..

Database 2022.06.13