상속 Inheritance 상속은 "is a kind of" 관계를 지정해주는 것이다. 위 그림을 예시로 [Car] is a kind of [Vehicle] 관계가 형성된 것이다. 이 때, Vehicle 클래스는 슈퍼(Super) 클래스, 기본(Base) 클래스, 부모(Parent) 클래스라고 하며, 서브 클래스의 일반화된 클래스이다. Car 클래스는 서브(Sub) 클래스, 파생(Derived) 클래스, 자식(Child) 클래스라고 하며, 슈퍼 클래스의 전문화된 클래스이다. 서브 클래스는 슈퍼 클래스로부터 모든 것을 상속 받는다. 예를 들어 Vehicle 클래스에서 drive() 라는 메소드가 있다면, Car 클래스는 drive()라는 멤버 메소드를 갖게 된다. 하나의 슈퍼 클래스는 하나의 서브 클래스만..
재귀 (Recursive) 메소드 재귀 메소드는 메소드가 자기 자신을 호출하는 것이다. public class Recursive { public static void max(int value) { if (value < 0) { return; } else { System.out.println(value); max(value - 1); } } public static void main(String[] args) { max(10); } } 위 코드처럼 max 함수는 자기 자신을 또 호출하여 10부터 0까지 출력하는 반복문 효과가 발생한다. 이 때, 주의해야 할 것은 추가 호출 없이 return 하는 종료 조건도 있어야 한다는 것이다. 재귀 메소드는 팩토리얼, 피보나치, 하노이의 탑 문제를 해결할 때 활용할 수..
응용 프로그램을 설계할 때, 설계가 용이하고, 이해하기 쉽고, 단위로 디버깅이 가능하도록 코드를 작은 부분으로 나누는 것이 핵심 원칙이다. 메소드는 한국어로 번역하면 함수인데, 메소드와 함수에는 약간의 차이가 있다. 메소드는 객체의 동작을, 함수는 기능 구현(ex: static method)을 나타낸다. 메소드 메소드는 Java 프로그램에서 (하나의) 특정 작업을 수행하는 일련의 문들을 하나로 묶은 그룹이다. 문들을 하나의 그룹으로 묶을 때에는 블록 단위로 묶인다. 메소드는 함수, 서브루팅, 프로시저 등과 비슷한 개념이지만 클래스의 안에서만 존재할 수 있으며, 반드시 클래스 / 객체로부터 호출되어야만 한다. 대표적인 예시로는 - main 메소드: Java 응용 프로그램 진입점 - println 메소드: ..
분기문 - goto 문 C, C++, C# 같은 언어에서 제공하는 분기문인 goto 문은 레이블이 지정된 문으로 제어를 전송한다. 하지만 Java는 goto 문을 제공하지 않는다. JVM에 구현되었지만 이후에 제거되어, 현재는 키워드로만 남아있다(변수의 이름으로 사용 못 함). - break 문 int i = 0; while (true) { System.out.println(i); i++; if (i > 10) break; } break 문은 가장 가까운, 현재 머무르고 있는 반복문 블록(만) 종료하는 것이다. 위 코드에서는 i 값이 10을 초과하면 반복문이 종료된다. - continue 문 int i = 0; while (true) { System.out.println(i); i++; if (i < 1..
반복문 - while 문 while 문은 조건식이 참인 동안 블록 안의 명령문들을 반복적으로 수행한다. int i = 0; while (i < 10) { System.out.println(i); i++; } 이 예시에서는 i 가 10보다 작으면 블록 안의 명령문을 실행한다. 블록 안에서는 i 의 값이 1만큼 증가하고, 10이 되었을 때 반복문이 종료된다. while 문을 사용할 때 주의할 것은 탈출구(while 문을 탈출할 수 있는 조건)가 반드시 있어야 한다는 것이다. 그렇지 않으면 영원히 종료하지 않는 오류가 발생하게 될 것이다. - do while 문 do while 문은 while 문과 동일하게 작동하지만, 하나 다른 것은 처음부터 조건식의 결과가 거짓이더라도 반복문 내의 명령문들이 1번은 무조건..
- 문(Statement)과 표현식(Expression) 컴퓨터는 상태 변경 기계이다. 즉, 메모리의 상태를 변경한다는 것이다. 프로그래밍 언어로 이 컴퓨터에게 명령을 해서 메모리의 상태를 변경하기 위해서 개발자는 논리를 구성하는 문과 값으로 평가될 수 있는 표현식을 통해 프로그램을 작성해 나간다. 따라서, 프로그램은 문이라는 기본 단위로 구성된다고 볼 수 있다. int a = 0; a = a + 5; 여기서 int a 이는 변수 a를 선언함으로써 메모리를 할당 받게 되고 메모리의 상태를 변경하게 되므로 문으로 구분한다. a = a + 5; 에서 수행하는 대입(할당) 연산은 a + 5를 값으로 평가할 수 있어 표현식으로 구분한다. - 블록(Block) Java에서는 반복문, 조건문 등과 같이 문을 블록으..
- 컬렉션 프레임워크(Collection Framework)란? 데이터 군(그룹)을 저장하는 클래스들을 표준화한 설계이다.인터페이스와 다형성을 이용한 객체지향적 설계를 통해 표준화되어 있어 사용하기 편리하고, 재사용성이 높은 코드를 작성할 수 있다는 장점을 제공한다. - 컬렉션 프레임워크의 핵심 인터페이스 컬렉션 데이터 그룹은 크게 3가지 타입이 존재한다고 인식하여 아래와 같이 3개의 인터페이스를 정의한다. 인터페이스 특징 List 순서 있는 데이터 집합 데이터 중복 허용 구현(implements 하는) 클래스: ArrayList, LinkedList, Stack, Vector 등 Set 순서 없는 데이터 집합 데이터 중복 ❌ 구현 클래스: HashSet, TreeSet 등 Map 키(key)와 값(va..
- 변수(Variable)란? 변수는 단 하나의 값을 저장할 수 있는 메모리 공간이다. 이 공간에 저장된 값은 변경이 가능하며 이 때, 새로운 값이 저장되고 기존의 값은 사라지게 된다. - 변수의 선언과 초기화 변수는 선언하고 초기화를 해야 사용할 수 있다.변수 선언은 아래 코드와 같이 변수타입과 변수명을 지정해서 한다. int age; 변수 선언 시 메모리의 빈 공간에 변수타입에 알맞은 크기의 저장 공간이 확보되고, 이 공간을 변수명을 통해 읽어올 수 있다. 변수 초기화는 아래 코드와 같이 대입연산자("=")를 이용해서 한다. int age = 20; 변수 초기화를 하지 않으면 이전에 다른 프로그램이 사용하던 값(쓰레기값, Garbage Value)이 남아있을 수 있으며 java: variable a ..