*추상클래스 개념

- 추상은 사전적 의미로 실체간의 공통되는 특성을 추출하는 것

- 실체클래스들의 공통특성을 추출해서 선언한 클래스를 추상클래스

- 추상클래스와 실체클래스는 상속관계에 있고 추상클래스의 모든 특성을 물려받음

- 추상클래스로는 직접 객체를 생성할 수 없다.

 

*추상클래스 용도

- 표준화: 실체클래스들의 공통된 필드와 메소드의 이름을 통일할 목적

(개발자간 문서설계로도 가능하지만 추상클래스로 잘 설계해놓으면 코드만 보고도 실체클래스들을 구현할 수 있다.)

- 개발시간단축: 실체클래스를 작성할 때 시간 절약

(공통적인 필드와 메소드는 추상클래스에 정의해두고 실체클래스마다 다른기능만 개발하면 개발시간을 단축시킬수있다.)

- 사내에서도 BaseBatch 라는 추상클래스가 있어서 이를 상속받아 배치를 구현하는 프로세스가 있다.

- *잘만들어진 추상클래스는 프레임워크나 오픈소스같은 곳에서 유용하게 사용되고있다.

(메인로직은 추상클래스에 정의하고 구현체에서는 각 애플리케이션 기능의 특성을 담는 구조로 개발가능)

 

*자바는 다중상속이 불가능하지만 인터페이스로 다중상속 가능

*인터페이스는 다음시간에!

 

 

[ 확인문제 ]

1 - 1

자바는 다중상속을 허용하지 않음

 

2 - 2

부모-자식 상속 관계에서 자식클래스를 자동타입변환한 부모클래스에 대해서만 강제타입변환이 가능

// 자동타입변환을 하면 부모클래스에 있는 메소드만 사용할수있는 제약이 생기기때문

 

3 - 1

final 클래스로 상속을 할수없기 때문에 부모클래스가 될수없음

 

4 - 4

protected 접근제한을 갖는 메소드는 다른 패키지의 자식클래스에서 재정의 가능

 

5

자식클래스의 생성자에서 자동으로 super(); 를 호출하는데

부모클래스에 디폴트 생성자가 없음 (매개변수생성자가 있으면 내부적으로 디폴트생성자 안생김)

이를 해결하기 위해서는 부모클래스에 디폴트생성자를 추가하거나

자식클래스에서 부모클래스의 매개변수생성자를 명시적으로 호출하면됨

 

6

Parent(String nation) call

Parent() call

Child(String name) call

Child() call

 

7

일반타이어가 굴러갑니다.

스노우타이어가 굴러갑니다.

// 자동타입변환을 해도 해당 객체로는 부모클래스의 메소드만 접근 가능

 

8 - 2

자식클래스를 자동타입변환한 부모클래스에 대해서만 강제타입변환이 가능

'Language > Java' 카테고리의 다른 글

자바 커뮤니티3 - 인터페이스  (0) 2019.06.05
자바 커뮤니티1 - Class  (0) 2019.05.22
Java 문자열 객체  (0) 2018.08.04
Java 배열 선언, 초기화  (0) 2018.08.04
Java 접근지정자 (Access Modifier)  (0) 2018.08.04

1. pom.xml dependency 추가

- scope 에 대한 정의는 더 찾아보기  

<dependency> <!-- spring.io 에서 프로젝트 생성시 설정 -->
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

<!-- mssql  -->
<dependency>
  <groupId>com.microsoft.sqlserver</groupId>
  <artifactId>mssql-jdbc</artifactId>
  <scope>test</scope>
</dependency>

2. application.properties에 datasource 설정

# dev datasource (mssql) 
spring.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.url=jdbc:sqlserver://[db서버정보];databasename=[db이름]
spring.datasource.username=[계정아이디]
spring.datasource.password=[계정패스워드]

 

 

** Boot의 pom.xml은 parent pom.xml을 참조하고 있어서 스프링부트버전에 맞는 디펜던시를 가져오기 때문에 version정보를 보통 생략한다고 한다. > 이 내용도 좀 더 자세히 찾아봐야할듯

 

추후 참고글: https://jeong-pro.tistory.com/168

 

https://bbchu.tistory.com/53

 

Spring Boot 프로젝트 셋팅2 - 프레임워크

서버에 톰캣8.5 / Java1.8 설치가능한 것을 확인하고 프레임워크 셋팅을 시작했다. 프레임워크는 Maven 기반 spring boot 프로젝트를 import하여 셋팅하였다. (https://start.spring.io/ 에 접속하여 빌드환경과..

bbchu.tistory.com

지난 작업에 이어서 오늘은 화면템플릿인 sitemesh를 적용해보았다.

기존 사이트가 jsp를 사용하고 있는데 퍼블리싱은 도저히 손댈수가 없어서.. jsp기반의 템플릿을 사용했다.

 

1. pom.xml dependency 추가

<!-- sitemesh -->
<dependency>
<groupId>opensymphony</groupId>
  <artifactId>sitemesh</artifactId>
  <version>2.4.2</version>
</dependency>

2. Bean 등록

- 부트에서는 Application 클래스에 명시적으로 Bean을 등록 (mvc에서는 web.xml 에 설정)

@SpringBootApplication
@EnableAutoConfiguration
public class HdlApplication {

  public static void main(String[] args) {
  	SpringApplication.run(HdlApplication.class, args);
  }

  @Bean
  public FilterRegistrationBean siteMeshFilter() {
    FilterRegistrationBean filter = new FilterRegistrationBean();
    filter.setFilter(new SiteMeshFilter());
    return filter;
  }
}

3. xml 설정  

- sitemesh를 사용하기 위해서는 decorators.xml 파일을 설정해줘야하는데

- 부트를 쓰는 경우에 해당 파일은 webapp/WEB-INF/ 하위에 위치해야 자동으로 설정이 된다.

- decorators.xml 에서는 exclude 할 패턴과 header, footer 정보들을 설정하면 됨

<?xml version="1.0" encoding="UTF-8"?>

<decorators defaultdir="/WEB-INF/jsp/adm/">
  <excludes>
    <!-- 예외처리 패턴 -->
    <pattern>**.html</pattern>
    <pattern>**/loginform</pattern>
  </excludes>

  <!-- ADMIN DECORATOR START -->
  <decorator name="web_admin" page="layout/template.jsp">
    <pattern>/adm/*</pattern>
    <pattern>/WEB-INF/jsp/adm/**</pattern>
  </decorator>

  <decorator name="web_admin_header" page="layout/header.jsp"/>
  <decorator name="web_admin_footer" page="layout/footer.jsp"/>
  <!--// ADMIN DECORATOR END -->

</decorators>

 

+ Recent posts