업캐스팅 (UPCASTING) 상위 클래스의 객체 참조 변수에 하위 클래스의 인스턴스를 대입하는 것을 의미합니다. 모든 객체 내의 모든 멤버에 접근 할 수 없고, 상위 클래스의 멤버에만 접근이 가능합니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 public class Main { public static void main(String argsp[]) { Top top = new Top(); //상위 클래스 타입에 상위 클래스 인스턴스 대입 top.show(); top = new Bottom(); //상위 클래스 타입에 하위 클래스 인스턴스 대입 top.show(); } } public cl..
SRP - 단일 책임 원칙 모든 객체는 하나의 책임만을 가지면 객체가 제공하는 서비스는 하나의 책임을 수행하는데 집중 되어야 한다. 즉 어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다. 단일 책임 원칙이 잘 자켜지지 않은 경우는 분기 처리를 위한 if문으로 코드를 보도록 하겠습니다. Colored By Color Scripter™ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 public class Person { public String job; public Person(String job) { this.job = job; } public void Work() { if(job.equals("Programmer")) System.out.println("코딩하다");..
클래스 다이어그램 클래스 다이어그램은 시스템의 정적인 상태인 '논리적인 구조'를 표현합니다. 클래스 다이어그램의 주목적은 클래스간의 관계를 한눈에 파악하는데 있습니다. ■ 클래스의 표현 Class Name Attribute1 Attribute2 operation1(인자타입):반환타입 operation2(인자 타입):반환타입 일반적인 클래스는 사각형으로 표시되고 맨 상단은 class의 이름에 해당됩니다. 중단은 클래스가 포함하고 있는 멤버 변수들이오고 접근 제한자 public,private,protection에 대해서 각각 +,-,# 으로 표현이 됩니다. 하단에는 클래스가 포함하고 있는 메서드들이 표현이 됩니다. 원본 소스입니다. Person 클래스를 클래스 다이어그램으로 표현합니다. 인터페이스나 추상 클..
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 ..
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 ..
추상화와 메모리 이번에는 추상화를 통한 클래스 모델링을 하고 클래스의 인스턴스가 생기는 과정에 대해 메모리에는 어떤 식으로 할당이 되는지에 대해서 알아 보겠습니다. '새'라는 클래스를 모델링 해보겠습니다. 추상화를 통해 내가 관심 있는 역역에 대해서만 '속성'과 '기능'을 가져와 보겠습니다. Bird Class 속성 - 이름, 날개의 개수 기능 - 날다 실제 코드로 정의하게 되면 다음과 같습니다. 1 2 3 4 5 6 7 8 9 10 11 12 public class Bird { public String name; public int countofwing; public void fly() { System.out.println("날다"); } } 실제 테스트를 위한 main을 포함하는 클래스도 구현 하겠습..
추상화 추상화란 구체적인 것을 분해해서 관찰자가 관심 있는 특성만 가지고 재조합 하는 것으로 객체 모델링 이라고 합니다. 이 말을 이해하려면 일단 클래스와 객체의 의미를 명확하게 정의해 보겠습니다. ● 객체는 유일무이한 사물로써 속성과 기능을 가짐 ● 클래스는 같은 특성을 지닌 여러 객체를 총칭하는 집합의 개념 김연아, 원빈은 어떠한 속성과 기능을 가지는 객체에 해당이 되고 김연아, 원빈을 총칭하는 개념으로 '사람'이라는 클래스라고 볼 수 있습니다. 다시 모델링이라는 개념을 보도록 하겠습니다. 모델링을 한다는 것은 보통 클래스를 설계를 한다는 것과 같은 의미입니다. 예를 들어 '사람'이라는 클래스를 설계한다고 가정해보겠습니다. 사람의 속성 : 키,몸무게,성별,머리길이,다리길이 ...... 사람의 기능 :..
프로그램이 메모리를 활용하는방법 객체 지향 프로그램에서 메모리 사용하는 방식에 대해 알아보겠습니다. 프로그램이 실행 되면 메모리는 코드 실행 영역과 데이터 저장 영역으로 분할이 됩니다. 여기서 데이터 영역은 다시 Static 영역, Stack 영역, Heap 영역으로 분할이 됩니다. 여기에서 집중적으로 볼 것은 데이터 영역입니다. ● Static 영역 - 프로그램에서 사용되는 패키지 및 클래스 ● Stack 영역 - main() 메서드를 포함 한 메서드들 및 블록구문 ● Heap 영역 - 객체 기본적으로 프로그램이 실행이 되면 모든 자바 프로그램이 공통적으로 가지는 java.lang 패키지와 사용자가 import 한 패키지 그리고 main 메소드를 포함하고 있는 class가 Static영역에 할당됩니다...