본문 바로가기

Java/OOP

(33)
[Java | OOP] 7-39. 인터페이스의 장점 📌 학습 목차 39. 인터페이스의 장점 39. 인터페이스의 장점 •인터페이스는 두 대상(객체) 간의 연결, 대화, 소통을 돕기 위한 중간 역할을 함 예시) 음료 자판기를 사용할 경우, 실제 자판기 내부 기계가 아닌 기계 껍데기를 통해 음료를 구입할 수 있음 예시) 컴퓨터를 사용할 경우, 실제 하드웨어가 아닌 GUI(Graphic User Interface)를 통해 컴퓨터를 다룰 수 있음 1. 표준화가 가능함 •기본 틀로서 표준 인터페이스를 먼저 작성한 후 다수의 개발자들이 해당 인터페이스를 구현해 프로그램을 작성할 경우, 보다 일관되고 정형화된 프로그램을 개발할 수 있음 2. 변경에 유리한 유연한 설계가 가능함 •인터페이스는 클래스의 선언과 구현을 분리시켜 클래스 간의 직접적인 관계(강한 결합)를 간접적..
[Java | OOP] 7-38. 인터페이스와 다형성 📌 학습 목차 38. 인터페이스와 다형성 38. 인터페이스와 다형성 •인터페이스는 인터페이스를 구현하는 클래스(구현 클래스)의 조상과도 같은 역할에 해당하므로 다형성에 의해 인터페이스 타입의 참조 변수로 구현 클래스의 객체를 참조할 수 있음 이때 인터페이스 타입의 참조 변수는 구현 클래스의 객체 멤버 중 인터페이스에 정의된 멤버만 사용할 수 있음 •인터페이스는 메서드의 매개 변수나 반환 타입으로 사용될 수 있으며, 이는 구현 클래스의 객체를 매개 변수로 받거나 구현 클래스의 객체를 반환하는 것을 의미함 •인터페이스가 메서드의 반환 타입으로 사용될 경우, 메서드의 반환 타입, 반환된 구현 클래스의 객체 타입, 반환된 구현 클래스의 객체를 저장할 참조 변수의 타입은 서로 일치하거나 자동 형변환이 가능해야 함..
[Java | OOP] 7-35~37. 인터페이스 📌 학습 목차 35. 인터페이스의 정의 36. 인터페이스의 상속 37. 인터페이스의 구현 35. 인터페이스의 정의 인터페이스(interface): 추상 메서드의 집합인 미완성의 기본 클래스(설계도) •일종의 추상 클래스인 인터페이스는 추상 클래스와 같이 새로운 클래스를 작성하는 데 도움을 줄 목적으로 작성되며, 미리 정해진 규칙에 맞게 구현할 수 있도록 표준을 제시하는 데 사용함 •추상 클래스가 일반 클래스에서 부분적으로 추상 메서드를 가지는 미완성 설계도에 비유된다면, 인터페이스는 구현된 것이 전혀 없는 껍데기와 같은 미완성의 기본 설계도와 같음 •인터페이스는 추상 클래스보다 추상도가 높아 오직 추상 메서드, 상수, 디폴트 메서드, static 메서드만 멤버로 가질 수 있음 •인터페이스는 interfa..
[Java | OOP] 7-34. 추상 클래스의 작성2 📌 학습 목차 34-1. 추상 클래스의 작성 예제1 34-2. 추상 클래스의 작성 예제2 34-1. 추상 클래스의 작성 예제1 •추상 클래스를 작성할 경우, 1. 코드 중복을 제거하고, 설계도를 쉽게 작성할 수 있음 2. 코드 변경 및 관리에 용이함 1. 코드 중복을 제거하고, 설계도를 쉽게 작성할 수 있음 •1-1~3) 같은 회사에 버전별 Phone 설계도가 있음을 가정할 때, 대부분의 설계 구성은 A 코드로 동일하나 버전마다 ★ 코드의 일부 차이만 존재함 이때 버전별 Phone 설계도를 사용해 전체 코드를 관리할 경우, A 코드 중복이 다수 발생함 •2~3) 버전별 Phone 설계도의 공통 코드인 A를 뽑아 추상 클래스로 정의한 후, 해당 추상 클래스를 상속받아 ★ 코드만 구현하는 자손 클래스를 작성..
[Java | OOP] 7-33. 추상 클래스의 작성1 📌 학습 목차 33-1. 추상 클래스의 작성 예제1 33-2. 추상 클래스의 작성 예제2 33-1. 추상 클래스의 작성 예제1 •추상 클래스는 상속을 통해 자손 클래스에서 추상 메서드를 오버라이딩으로 모두 구현함 이때 추상 메서드 중 하나라도 구현하지 않을 경우, 자손 클래스 또한 추상 클래스로 지정해야 함 // 추상 클래스로 정의하지 않은 경우 class Footballer { int x, y; // 지정 위치 void move(int x, int y) { /* 지정 위치로 이동 */ } void stop() { /* 지정 위치에 정지 */ } void run() { /* 달리기 시작 */ } void kick() { /* 공차기 시작 */ } } class Skater { int x, y; // 지정..
[Java | OOP] 7-31~32. 추상 클래스 / 추상 메서드 📌 학습 목차 31-1. 추상 클래스 31-2. 추상 메서드 32. 추상 클래스와 추상 메서드 예제 31-1. 추상 클래스 추상 클래스(abstract class): 추상 메서드를 가진 미완성 클래스(설계도) •추상 클래스는 여러 클래스에서 공통적으로 사용될 수 있는 부분을 추리거나 기존 클래스에서 공통적으로 사용되는 부분을 뽑아서 만든 클래스로서, 새로운 클래스를 작성하는 데 도움을 줄 목적으로 작성됨 •추상 클래스는 상속을 통해 자손 클래스에서 추상 메서드를 오버라이딩으로 모두 구현한 경우에만 객체를 생성할 수 있음 •추상 클래스는 클래스 선언부에 abstract 제어자를 사용하여 추상 메서드 구현이 필요한 추상 클래스임을 나타냄 •추상 클래스는 추상 메서드를 포함한다는 것을 제외하곤 일반 클래스와 ..
[Java | OOP] 7-29~30. 하나의 배열로 여러 종류의 객체 다루기 📌 학습 목차 29. 하나의 배열로 여러 종류의 객체 다루기 30. 하나의 배열로 여러 종류의 객체 다루기 예제 29. 하나의 배열로 여러 종류의 객체 다루기 •다형성의 두 가지 장점은 메서드의 매개 변수에 다형성을 적용할 수 있다는 점과 하나의 배열로 여러 종류의 객체를 다룰 수 있다는 점임 •다형성에 의해 조상 타입의 참조 변수로 자손 타입의 객체를 참조하는 것이 가능하므로, 조상 타입의 참조 변수 배열을 사용하면 공통 조상을 가진 여러 종류의 객체를 배열에 담아 하나의 묶음으로 간단히 다룰 수 있음 📌 // 1) 조상 타입의 참조 변수로 자손 타입의 객체를 참조할 경우 JavaProduct j1 = new JavaPhone(); JavaProduct j2 = new JavaPad(); JavaPro..
[Java | OOP] 7-27~28. 매개 변수의 다형성 📌 학습 목차 27. 매개 변수의 다형성 28. 매개 변수의 다형성 예제 27. 매개 변수의 다형성 •다형성을 간단히 정리할 경우, 1) 조상 타입의 참조 변수로 자손 타입의 객체를 참조할 수 있음 2) 참조 변수의 형변환으로 사용할 수 있는 객체의 멤버 개수를 조절할 수 있음 3) 참조 변수의 형변환 전 instanceof 연산자를 사용해 형변환 가능 여부를 확인할 수 있음 •다형성의 두 가지 장점은 메서드의 매개 변수에 다형성을 적용할 수 있다는 것과 하나의 배열로 여러 종류의 객체를 다룰 수 있다는 것임 •참조형 매개 변수를 가진 메서드는 매개 변수의 다형성에 의해 자신과 같은 타입 또는 상속 관계에 있는 자손 타입의 객체를 매개 변수로 받아들일 수 있음 📌 // 1) 메서드의 매개 변수에 다형성을..
[Java | OOP] 7-26. instanceof 연산자 📌 학습 목차 26. instanceof 연산자 26. instanceof 연산자 instanceof 연산자: 참조 변수의 형변환 전, 형변환 가능 여부를 확인하기 위해 사용하는 연산자 •참조 변수의 형변환 전, instanceof 연산자를 사용해 반드시 참조 변수가 참조하고 있는 객체의 실제 타입을 확인해야 함 •instanceof 연산자는 주로 조건문에 사용되며, 연산 결과로 true를 반환한 경우 참조 변수가 검사한 타입(클래스명)으로 형변환이 가능함을 의미함 •instanceof 연산자는 참조 변수가 참조하고 있는 실제 객체의 타입뿐만 아니라, 해당 객체의 조상 타입에 대해서도 연산 결과로 true를 반환함 void Example(Phone p) { // Example(new UpgradedPho..
[Java | OOP] 7-24~25. 참조 변수의 형변환 📌 학습 목차 24-1. 참조 변수의 형변환 24-2. 참조 변수의 형변환 예제 24-1. 참조 변수의 형변환 참조 변수의 형변환: 참조 변수 타입을 변경해 사용할 수 있는 객체의 멤버 개수를 조절하는 것 •참조 변수의 형변환은 사용할 수 있는 객체의 멤버 개수를 조절하기 위해 참조 변수의 종류를 바꾸는 것으로 값이 변경되는 기본형의 형변환처럼 참조 변수에 저장된 객체의 주솟값이 변환되는 것이 아님 •참조 변수의 형변환은 서로 상속 관계에 있는 클래스 사이에서만 가능함 이에 조상 타입과 자손 타입 간의 형변환은 가능하나, 상속 관계가 아닌 자손 타입 간의 형변환은 허용되지 않음 •참조 변수의 형변환은 조상의 조상으로도 형변환이 가능하므로, 모든 참조 변수는 Object 타입으로 형변환될 수 있음 단, O..
[Java | OOP] 7-23. 다형성 📌 학습 목차 23-1. 다형성 23-2. 다형성 예제 23-1. 다형성 다형성(polymorphism): 여러 가지 형태를 가질 수 있는 능력 / 조상 타입의 참조 변수로 자손 타입의 객체를 다루는 것 •자바에서는 한 타입의 참조 변수로 여러 타입의 객체를 참조함으로써 다형성을 프로그램적으로 구현했으며, 이는 조상 타입의 참조 변수로 자손 타입의 객체를 참조할 수 있는 다형성을 의미함 •생성된 객체를 다루기 위해선 객체 타입과 일치하는 참조 변수를 사용하는 것이 일반적이나, 두 클래스가 서로 상속 관계에 있을 경우 다형성에 의해 조상 타입의 참조 변수로 자손 타입의 객체를 참조하는 타입 불일치가 허용됨 반면 자손 타입의 참조 변수로 조상 타입의 객체를 참조할 경우, 참조 변수가 다룰 수 있는 객체의 멤..
[Java | OOP] 7-22. 캡슐화와 접근 제어자 📌 학습 목차 22-1. 캡슐화와 접근 제어자 22-2. 캡슐화와 접근 제어자 예제 22-1. 캡슐화와 접근 제어자 캡슐화(encapsulation): 객체의 멤버를 하나의 캡슐로 묶어 외부의 접근으로부터 실제 구현 내용을 감추는 것 Getter: 멤버 변수의 값을 반환하는 메서드 / 'get메서드 이름'으로 선언함 Setter: 매개 변수로 지정된 값을 검증해 유효한 경우에만 값을 변경하는 메서드 / 'set메서드 이름'으로 선언함 •객체의 멤버를 캡슐화하여 보호하는 이유는 외부의 잘못된 사용으로 인해 객체가 손상되지 않도록 하기 위함임 이때 자바에서는 캡슐화된 멤버를 보호하거나 외부 접근이 불필요한 멤버를 클래스 내부로 감추기 위해 클래스나 멤버, 주로 멤버에 접근 제어자를 사용하여 외부로부터의 직접..
[Java | OOP] 7-21. 접근 제어자 📌 학습 목차 21. 접근 제어자 21. 접근 제어자 접근 제어자(access modifier): 외부에서 접근하지 못하도록 제한하는 역할을 함 / 클래스, 멤버 변수, 생성자, 메서드에서 사용됨 •접근 범위는 public(접근 제한 없음) > protected(다른 패키지의 자손 클래스) > default(같은 패키지) > private(같은 클래스) 순임 •클래스는 public, default 총 2개의 접근 제어자를, 멤버 변수, 생성자, 메서드는 public, protected, default, private 총 4개의 접근 제어자를 사용할 수 있음 •protected는 상속 관계에 있는 자손 클래스에서 접근할 수 있도록 제한하는 것이 목적이지만, 같은 패키지 내에서도 접근이 가능함 이에 prot..
[Java | OOP] 7-17~20. 제어자(static / final / abstract) 📌 학습 목차 17. 제어자 18. static 19. final 20. abstract 17. 제어자 제어자(modifier): 클래스와 클래스의 멤버(멤버 변수, 메서드)에 부가적인 의미를 부여함 •제어자의 종류는 크게 접근 제어자와 그 외 제어자로 구분됨 예시) 접근 제어자: public, protected, (default), private / 그 외 제어자: static, final, abstract 등 •제어자는 하나의 대상에 여러 제어자를 조합하여 사용할 수 있으나, 접근 제어자는 한 번에 한 개만 선택하여 사용할 수 있음 •제어자들 간의 순서는 없으나, 주로 접근 제어자를 가장 왼쪽에 놓는 경향이 있음 18. static static: '클래스의', '공통적인'의 의미를 가짐 / 멤버 변수..
[Java | OOP] 7-12~16. 패키지 / import문 + 업데이트 예정 ✅ 📌 학습 목차 12. 패키지 13. 패키지 선언 14. 클래스 패스 15. import문 16. static import문 12. 패키지 •- 13. 패키지 선언 •- 14. 클래스 패스 •- 15. import문 •- 16. static import문 •- Reference [남궁성의 정석코딩] Java의 정석 기초편 강의 [도우출판] Java의 정석 기초편 / 기본편
[Java | OOP] 7-10~11. 참조 변수 super / 생성자 super() 📌 학습 목차 10. 참조 변수 super 11-1. 생성자 super() 11-2. 생성자 super() 예제 10. 참조 변수 super 참조 변수 super: 객체 자신을 가리키는 참조 변수 / 조상 클래스의 멤버와 자손 클래스의 멤버를 구분하기 위해 사용함 참조 변수 this: 객체 자신을 가리키는 참조 변수 / 멤버 변수와 지역 변수를 구분하기 위해 사용함 📌 // 1) 조상 클래스와 자손 클래스의 멤버 변수 이름이 중복되는 경우 package chap_07; class Parent1 { int x = 10; // super.x } class Child1 extends Parent1 { int x = 20; // this.x void method() { // 1-1) 자손 클래스의 멤버 변수 S..
[Java | OOP] 7-5~6. 단일 상속 / Object 클래스 📌 학습 목차 5. 단일 상속 6. Object 클래스 5. 단일 상속 •객체지향 언어인 C++이 다중 상속(multiple inheritance)을 허용하는 반면, 자바는 단일 상속만 허용함 •다중 상속을 허용할 경우 복합적인 기능을 가진 클래스를 쉽게 작성할 수 있지만, 클래스 간의 관계가 매우 복잡해지고 서로 다른 클래스로부터 상속받는 멤버들의 이름이 같을 경우 서로 구분할 수 없음 •하나의 조상 클래스만 가질 수 있는 단일 상속은 다중 상속에 비해 불편한 점이 많으나, 클래스 간의 관계가 명확해져 코드를 더욱 신뢰할 수 있게 만들어 준다는 점에서 다중 상속보다 유리함 •자바에서는 다중 상속을 보완하기 위해 인터페이스를 사용하거나 비중이 높은 하나의 클래스만 상속 관계를 맺고 이외 클래스는 포함 관..
[Java | OOP] 7-3~4. 클래스 간의 관계(포함 관계) / 클래스 간의 관계 결정 📌 학습 목차 3. 클래스 간의 관계(포함 관계) 4. 클래스 간의 관계 결정 3. 클래스 간의 관계(포함 관계) 포함(composite): 클래스의 멤버 변수로 다른 클래스 타입의 참조 변수를 선언하는 것 •상속 외 클래스를 재사용하는 방법으로 클래스 간에 포함 관계를 맺어줄 수 있음 •하나의 거대한 클래스를 작성하지 않고 작업 단위별로 작성된 클래스를 조합해 포함 관계로 재사용할 경우, 코드 복잡도가 줄어 간결하고 손쉽게 클래스를 작성할 수 있고 단위 클래스들은 또 다른 클래스 작성에 재사용 될 수 있음 •클래스 작성 시 상속 또는 포함 관계의 문장을 만들어 클래스 간의 관계를 파악할 수 있으며, 대부분의 경우는 포함 관계에 해당함 즉, 'A는 B이다(is-a)'라는 문장이 성립되면 상속 관계, 'A..
[Java | OOP] 7-1~2. 클래스 간의 관계(상속 관계) 📌 학습 목차 1. 클래스 간의 관계(상속 관계) 2. 클래스 간의 관계(상속 관계) 예제 1. 클래스 간의 관계(상속 관계) 상속(inheritance): 기존의 조상 클래스를 재사용해 새로운 자손 클래스를 만드는 것 / 두 클래스를 조상과 자손의 관계로 맺어주는 것 상속 계층도(class hierarchy): 클래스 간의 상속 관계를 그림으로 표현한 것 •상속을 통해 클래스를 작성할 경우, 코드의 재사용성을 높이고 중복을 제거해 프로그램의 생산성과 유지 보수에 크게 기여함 •서로 상속 관계에 있는 두 클래스 중 상속해 주는 클래스를 조상 클래스(부모의 부모 이상), 상속받는 클래스를 자손 클래스라고 함 •자손 클래스는 생성자와 초기화 블럭을 제외한 조상 클래스의 모든 멤버를 상속받으며, 이때 공통 코..
[Java | OOP] 6-38~40. 변수의 초기화 / 멤버 변수의 초기화 📌 학습 목차 38. 변수의 초기화 39. 멤버 변수의 초기화 40. 멤버 변수의 초기화 예제 38. 변수의 초기화 변수 초기화: 변수를 선언하고 처음으로 값을 저장하는 것 •멤버 변수(클래스 변수, 인스턴스 변수)와 배열은 각 타입의 기본값으로 자동 초기화되지만, 지역 변수는 자동 초기화되지 않음 •지역 변수는 호출 스택 내 빈번한 재사용으로 인해 사용 전 필수적으로 수동 초기화를 해야 함 📌 // 변수의 초기화 class Example { // 1) 인스턴스 변수의 초기화 int x; int y = x; // 2) 지역 변수의 초기화 void method() { int i; int j = i; 🚨 // 에러 발생 } } 1) 인스턴스 변수의 초기화 •인스턴스 변수인 x와 y는 int형의 기본값인 0으..