삽입 정렬 (Insetion Sort) 자료 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여, 자신의 위치를 찾아 삽입함으로써 정렬을 완성하는 알고리즘 입니다. ■ 정렬 방식 1. 배열의 첫 번째 요소는 정렬 된 상태라고 가정한다. 2. 배열의 두 번째 요소부터 앞에 정렬된 배열을 차례대로 비교하며 교환한다. 3. 최종적으로 자신의 위치에 맞는 위치에 삽입된다. 4. 다음 배열 요소에 대해서 같은 작업을 반복한다. : 정렬이 완료 된 상태 : 비교되는 배열 요소들 5 4 3 2 1 첫 번째 배열요소는 정렬이 완료된 상태라고 가정을 합니다. 5 4 3 2 1 두 번째 요소부터 비교를 시작합니다. 앞에 정렬된 첫 번째 요소와 비교를 하고 4가 더 작으므로 둘의 위치를 바꿔줍니다. 4..
this 키워드 자기 자신애 대한 객체 참조값을 가진다. 메서드 내에서 사용되어 지고 static 메서드에서는 사용 할 수 없다. ■ 매개변수와 객체가 가지는 변수의 이름이 같을 경우 보통 생성자의 인자로 받는 변수의 이름이랑 객체에 속해있는 멤버변수의 이름이 같을 경우에 이 두개를 구분하기 위해 this 키워드를 사용합니다. Colored By Color Scripter™ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public class student { private String name; private int age; private String email; private String number; public student(String name,int age,String ..
선택 정렬(Selection Sort) 기존 위치에 맞는 원소를 선택하여 교환하는 방식 ■ 정렬 방식 1. 아직 정렬이 안된 리스트 중에 가장 앞에 원소를 최소값으로 설정 2. 가장 앞에 원소를 제외한 나머지 원소를 차례로 비교하고 최소값을 찾아감 3. 리스트 끝까지 비교 후 찾은 최소값을 가장 앞에 원소와 교환 4. 정렬이 안된 원소들을 가지고 반복 ■ 특징 - 최소값을 찾기 위한 비교횟수는 많지만 교환 횟수는 적다. - 데이터의 개수가 적을 때 좋은 성능을 발휘한다. - 시간복잡도 : O(n^2) ■ 소스코드 (Source Code) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 public int[] Selection_Sort(int[] data,int num..
Builder 패턴 빌더 패턴이란 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴입니다. ■ 빌더 패턴(Builder Pattern) 사용 이유 Colored By Color Scripter™ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 public class PersonInfo { private String name; private int age; private String email; private String number; public PersonInfo(String name,int age,String email,String number) { this.name = name; this.age = age;..
Final 키워드 final은 마지막, 최종적이라는 의미를 가지고 있기 때문에 변수나 메서드의 내용을 수정하지 않고 고정 시킬 때 사용하는 키워드 입니다. ▶ 클래스에의 final 키워드 클래스에 final 키워드가 붙는 경우는 '상속 불가'의 의미를 가집니다. 1 final public class A {} A 클래스를 final 키워드를 통해 다음과 같이 정의를 하였습니다. 1 public class B extends A{} B 클래스가 A클래스를 상속받게 하면 다음과 같은 오류가 발생합니다. B 클래스는 A클래스의 하위 클래스가 될 수 없다는 오류가 발생합니다. ▶ 메서드의 fnal 키워드 메서드의 final 키워드가 붙는 것은 '재정의 불가'를 의미합니다. 상위 클래스의 메서드를 하위 클래스에서 오..
추상 메서드와 추상클래스(Abstract Class) 추상 메서드는 선언부는 있지만 구현부가 없는 메서드를 의미합니다. 상위 클래스의 참조 객체 변수를 통해 하위 클래스에 각각 다른 내용을 적용 시키고 싶을 떄 사용합니다. ● 추상 메서드를 가지는 클래스는 추상 클래스로 선언되어야 한다. ● 추상 클래스를 상속받는 하위 클래스는 반드시 추상 메서드를 구현한다. ● 추상 클래스는 인스턴스(객체)를 생성 할 수 없다. new 사용을 못한다. 간단하게 예제를 통해서 추상 클래스의 필요성을 살펴 보겠습니다. Colored By Color Scripter™ 1 2 3 4 5 6 public abstract class Person { abstract void Introduce(); } Person 추상 클래스입니다..
다형성 객체 지향 언어에서 다형성이란 하나의 클래스나 메서드가 다양한 방식으로 동작이 가능 한 것을 의미합니다. 이러하 다형성에는 오버로딩과 오버라이딩이 존재합니다. 오버라이딩 오버라이딩이란 상위 클래스를 상속받는 하위 클래스가 상위 클래스의 메서드를 사용하지 않고 하위 클래스에서 재정의하여 사용하는 것을 의미합니다. 보통 재사용의 의미로 하위 클래스에서 상위 클래스의 내용을 사용하는 게 일반적이지만 필요에 따라서 하위 클래스에서 상위 클래스의 메서드 내용을 재정의 하여 사용하는 것을 의미합니다. 아래는 간단한 오버라이딩의 예를 보여줍니다. Colored By Color Scripter™ 1 2 3 4 5 6 7 8 9 public class B { public void show() { System.ou..
상속 객체 지향 언어에서 상속이란 상위 클래스에 존재하는 멤버를 하위 클래스로 그대로 물려 받는 것을 의미합니다. 물려 받는다는 개념보다는 재사용 + 확장의 의미로 생각하는게 더 편할 수 있습니다. 상속은 다음과 같은 특징을 가집니다. ●하위 클래스에서 상위 클래스를 상속받고자 한다면 클래스 정의 후 extends 사용 ●하위 클래스는 여러 개의 상위 클래스를 상속 받을 수 없음 (다중 상속 허용 X) ●하위 클래스는 상위 클래스의 내용을 재사용이 가능하고 내용을 확장 시킬 수있음 ●상위 클래스는 여러개의 하위 클래스를 가질 수 있음 ●상위 클래스와 하위 클래스에 같은 이름의 멤버 변수나 메서드가 존재 할 경우 상위 클래스의 내용은 감춰 짐 실제 예제를 통해서 구체적으로 살펴 보겠습니다. 예제 코드 1 ..
Template Method Pattern 상위 클래스에서 처리의 흐름을 제어하며, 하위 클래스에서 처리의 내용을 구체화한다.여러 클래스에 공통되는 사항은 상위의 추상 클래스에서 구현하고, 공통 되지 않는 부분에 대한 상세 구현은 하위 클래스에서 구현한다. 예제 햄버거를 만드는 클래스를 설계 해보겠습니다. 햄버거 종류에는 치즈버거와 불고기버거가 있을 수 있습니다. 1. 빵을 올린다. 2. 패티를 올린다. 3. 양상추를 올린다. 4. 빵을 올린다. 1. 빵을 올린다. 2. 패티를 올린다. 3. 치즈를 올린다. 4. 빵을 올린다. 각 버거는 위에 나온 순서대로 만들어 집니다. 1, 2, 3번 같은 경우는 중복되는 내용입니다. 즉 1, 2, 3 번의 경우 상위 추상 메서드로 올려주고 3번 같은 경우에는 상위에..
Singleton 패턴 디자인 패턴에서 싱글톤 패턴은 특정 클래스에 대해 new 연산자로 생성되는 인스턴스를 Stack 메모리에 한 번만 할당하여 이후에 new 연산자를 통한 객체 생성 요구에 대해서는 최초에 생성되었던 객체를 반환하는 디자인 패턴입니다. 즉 프로그램의 특정 클래스에 대한 유일 객체를 보장하는 패턴이라고 볼 수 있습니다. 일반적으로 앱에서 공통적으로 사용하는 데이터 클래스에 대해서 이와 같은 싱글톤 패턴 형식으로 작성하게 됩니다. 객체 생성을 위한 new 연산자는 해당 클래스의 인스턴스를 stack 메모리에 저장하게 되는데 싱글톤 패턴이 적용된 경우에는 new 사용을 통한 무분별한 인스턴스 생성을 막기 때문에 메모리 낭비를 방지할 수 있습니다. singleton.class 1 2 3 4 ..
Strategy Pattern 알고리즘의 인터페이스를 정의하고, 각각의 알고리즘은 캡슐화하여 동적으로 교체 사용 가능하도록 구현하는 디자인 패턴입니다. 클라이언트와는 독립적으로 구현되기 때문에 새로운 알고리즘을 추가하거나 기존의 알고리즘을 쉽게 변경이 가능합니다. Strategy Pattern Structure ● Context - 실제 각각의 알고리즘에 대한 인스턴스를 가짐 ● Interface - 각각의 알고리즘이 가져야 할 공통인터페이스 정의 ● Algorithm1,Algorithm2 - 실제 인터페이스 구현. 각각의 알고리즘을 프로그래밍 예제코드 Person_Interface은 전략패턴의 구조 중에 Interface에 해당됩니다. 알고리즘들이 공통적 으로 정의해야 할 인터페이스를 정의합니다. 즉 ..
getter/setter 메서드 구현 자바의 특성 중 정보 은닉(Information Hiding)의 특성을 고려한 방식입니다. 클래스의 멤버 변수를 private형으로 구현을 하고 이 멤버 변수에 대한 read/write는 각각 getter/setter 메서드를 통해 처리하도록 구현을 합니다. 사람의 정보를 저장하는 Member Class가 존재한다고 가정해 보겠습니다. Member Class의 멤버 변수로는 ● 나이 ( private int age) ● 이름 ( private String name) ● E-mail ( private String email) 그리고 Class의 멤버 변수 각각에 해당 하는 getter/setter 메서드 ● public int getage() , public void ..
프로그램이 메모리를 활용하는방법 객체 지향 프로그램에서 메모리 사용하는 방식에 대해 알아보겠습니다. 프로그램이 실행 되면 메모리는 코드 실행 영역과 데이터 저장 영역으로 분할이 됩니다. 여기서 데이터 영역은 다시 Static 영역, Stack 영역, Heap 영역으로 분할이 됩니다. 여기에서 집중적으로 볼 것은 데이터 영역입니다. ● Static 영역 - 프로그램에서 사용되는 패키지 및 클래스 ● Stack 영역 - main() 메서드를 포함 한 메서드들 및 블록구문 ● Heap 영역 - 객체 기본적으로 프로그램이 실행이 되면 모든 자바 프로그램이 공통적으로 가지는 java.lang 패키지와 사용자가 import 한 패키지 그리고 main 메소드를 포함하고 있는 class가 Static영역에 할당됩니다...