본문 바로가기

분류 전체보기

(454)
인터페이스를 활용한 다형성 구현(dao 구현하기) DAO : Data Access Object(데이터베이스에 접근하는 객체) 위의 예를 보면 똑같은 인터페이스를 이용하여 사용하지만 DB에 따라서 OracleDao, MysqlDao, MSsqlDao를 사용할 수 있다. package Basic_Grammar.chap3_OOP.ch09_interface_polymorphism.web.userInfo; import Basic_Grammar.chap3_OOP.ch09_interface_polymorphism.domain.userInfo.UserInfo; import Basic_Grammar.chap3_OOP.ch09_interface_polymorphism.domain.userInfo.dao.UserInfoDao; import Basic_Grammar.chap..
인터페이스를 왜 사용하는가? 인터페이스가 하는 일 : 클래스나 프로그램이 제공하는 기능 구현 Server (서비스 제공) 사용하는 곳 (Client 프로그램) : 클라이언트 프로그램이 서비스를 다 알고 사용하는 경우도 있지만, 클라이언트가 서비스 interface(어떻게 구현되어 있는지 선언되어있는)를 보고 사용. -> 어떻게 구현되어있는지는 모를 수도 있음 ( 어떤 기능인지 알고 인터페이스를 이용하여 사용 ) 어떤 클래스가 특정 인터페이스 타입이라고 하면 그 객체는 인터페이스가 제공하는 모든 메서드를 구현했다는 의미 ex) JDBC (DB : Oracle, Mysql, MS-sql 을 이용하여 구현할 수 있다) Connection 필요 생성-> DB에 Statement -> ResultSet 인터페이스 구현은 해당 디비회사에서 각..
인터페이스 모든 메서드가 추상메서드로 선언됨 (public abstract 생략해서 사용함) 모든 변수는 상수로 선언됨(public static final) Calc : interface (점선) Calculator : 구현하는 클래스 (일부 구현안한 추상 클래스) CompleteCalc : 상속(실선) 구현 다 함 package Basic_Grammar.chap3_OOP.ch08_interface; public class CalculatorTest { public static void main(String[] args) { Calc calc=new CompleteCalc(); int num1=10; int num2=2; System.out.println(calc.add(num1,num2)); System.out...
추상클래스(abstract class) 구현하기 추상(abstract) 구체적(concrete) 추상클래스란? : 구현 코드 없이 메서드의 선언만 있는 추상 메서드(abstract method)를 포함한 클래스 - 추상메서드가 포함된 추상클래스는 인스턴스 생성이 불가하다 new 생성 불가 (아래의 예시에서 Desktop클래스와 MyLaptop클래스만 인스턴스 생성이 가능하다) - 구현부가 다 있는 클래스를 abstract 키워드를 이용하여 추상클래스로 만들면 이 클래스는 상속만을 위한 클래스로 사용된다. 메서드 선언 : 변환타입, 메서드이름, 매개변수로 구성 메서드 정의 : 메서드 구현(implementation)과 동일한 의미 구현부 body를 가짐 왜 추상메서드를 만드는가? 공통으로 쓸 메서드는 구현 어떻게 쓸지 모르는 메서드는 추상메서드로 지정하..
Chap2. 리팩터링 원칙 정의 : 소프트웨어의 겉보기 동작은 그대로 유지한 채, 코드를 이해하고 수정하기 쉽도록 내부 구조를 변경하는 기법 (과정에서 겉보기 동작 유지) why : 이해하고 수정하기 쉬운 코드 what : 내부 구조를 변경 how : 겉보기 동작은 그대로 유지한채 → 소프트웨어 설계, 소프트웨어 이해, 버그 쉽게 찾을 수 있어서 프로그래밍 속도를 높일 수 있다. (경제적인 이유) 언제? ( 2번 : 준비할 때, 6번 : CR할 때 ) 3의 법칙 일단 개발 같은 일 두번하게 되면 일단 한다 또 같은 일을 하게 된다면 리팩터링 해라!! 준비를 위한 리팩터링 기능추가하기 직전 리팩터링 하면 더 쉽게 추가할 수 있지 않을까 고민 이해를 위한 리팩터링 코드를 파악해야 할 일이 있을 때, 이해한 내용을 더 잘 반영할 수 있..
객체 지향 -4 DownCasting(다운캐스팅), instanceof : 원래 하위 인스턴스였던 것이 -> 자신의 클래스로 다운 캐스팅이 될 경우에만!!! (반드시 원래 타입으로 되돌려야하는 경우, 왠만하면 overriding된 함수만 쓰는 것이 일관성 있고 코드가 깔끔하다. package Basic_Grammar.chap3_OOP.ch05_downcasting; import java.util.ArrayList; public class AnimalTest { public void testDownCasting(ArrayList animals){ for (Animal animal:animals){ if(animal instanceof Human){ Human human=(Human) animal; human.readBook(); }else if (animal instanceo..
객체 지향 -3 IS-A 관계, HAS-A 관계 IS-A 관계 -> 상속(inheritance) : 일반적인 개념과 구체적인 개념과의 관계 ex) 상위(Employee), 하위(Engineer, Manager) HAS-A 관계 -> composition : 클래스가 다른 클래스를 포함하는 관계 ex) Student가 Subject를 포함하는 관계
객체 지향 -2.1 다형성을 사용하는 이유 다른 상속받는 클래스를 더 생성하여 확장하려고할 때, if ~ else if 구문이 구현되고 코드의 유지보수가 어려워진다. 일반 클래스에서 추가적인 요구사항이 있을 때, 다형성에 의한 확장성을 이용하여 ex) Gold 등급을 추가하여 할인율은 똑같고 보너스 포인트 비율을 VIP 보다 적게 사용하고자하는 요구사항이 있을 때 package Basic_Grammar.chap3_OOP.ch04; import java.util.ArrayList; public class CustomerTest { public static void main(String[] args) { ArrayList customers=new ArrayList(); Customer customer1=new Customer(10010,"Tomas"..