다형성을 설계관점을 만든다.

기본클래스에서 자식클래스에게 제약을 걸어준다.

순수 가상 함수
- 자식클래스에서 반드시 오버라이딩 해주어야한다.
- virtual 로 선언되고 마지막이 = 0; 이면 순수 가상 함수
- 별도로 함수를 구현할 수 있다. 호출할 수 없다.

virtual void speak() const = 0;



추상 기본클래스
- 순수 가상함수가 포함이된 클래스
- abstact class는 인스턴스생성이 안된다.

class Animal
{
protected:
	string m_name;

public:
	Animal(string name)
		:m_name(name) {}

public:
	string getName() { return m_name; }

	virtual void speak() const = 0;
};


인터페이스
- 순수 가상 함수로만 이루어진 클래스
- 파라미터를 인터페이스로 받으면 다양하게 
구현된 자식 클래스들을 이용할 수 있다.

class IErrorlog
{
public:
	virtual bool reportError(const char * errorMessage) = 0;

	virtual ~IErrorlog() {}
};


순수 가상 함수가 있는 Class를 상속받으면 무조건 오버라이딩해야한다.

 

#include <iostream>
#include <string>

using namespace std;

class Animal
{
protected:
	string m_name;

public:
	Animal(string name)
		:m_name(name) {}

public:
	string getName() { return m_name; }

	virtual void speak() const = 0;
};

//void Animal::speak() const
//{
//	cout << m_name << " ??? " << endl;
//}

class Cat :public Animal
{
public:
	Cat(string name)
		:Animal(name) {

	}

	void speak() const
	{
		cout << m_name << " Meow " << endl;
	}
};


class Dog :public Animal
{
public:
	Dog(string name)
		:Animal(name) {

	}

	void speak() const
	{
		cout << m_name << " Woof " << endl;
	}
};

class Cow : public Animal
{
public:
	Cow(string name)
		:Animal(name) {

	}

	//void speak() const
	//{
	//	cout << m_name << " Woof " << endl;
	//}

};


//Interface 예제
//자신이 정의하지 않고 순수가상함수만 가지고 있다.
//Interface는 대문자 I를 붙여주는게 관습이다.
class IErrorlog
{
public:
	virtual bool reportError(const char * errorMessage) = 0;

	virtual ~IErrorlog() {}
};

class FileErrorLog : public IErrorlog
{
public:
	virtual bool reportError(const char * errorMessage)
	{
		cout << "File Error" << endl;
		return true;
	}

};

//부모클래스를 이용하기에 여러방법이 사용가능하다.
void logTest(IErrorlog & log) {
	log.reportError("Runtime Error!!");
}

int main()
{
	//speak()가 구현이 안되어있다.
	//Cow c("n");

	Cat c("cat");
	c.speak();

	FileErrorLog log;
	logTest(log);

	return 0;
}

'개발 소발 > 개발 C++(기초)' 카테고리의 다른 글

c++ 객체잘림,reference wapper  (0) 2019.09.30
c++ 다이아몬드 상속문제 해결  (0) 2019.09.30
c++ vitual,가상함수  (0) 2019.09.30
c++ 정적,동적바인딩  (0) 2019.09.30
c++ 가상소멸자  (0) 2019.09.23

자바에서 static개념

- 객체지향프로그램인 자바는 객체,변수등이 필요할때 메모리에 올려야한다.

- static은 프로그램으로 객체생성이전 JVM에 클래스가 로딩될때 메모리에 올라온다.

- 변수,메소드,내부클래스에서 static을 사용가능하다.

- 변수,메소드에서 자주사용한다.

- 변수에 static이 붙게 되면 Class로 접근 가능하다.

- 전역변수가 필요할때 static을 사용한다.

- 메소드에 static이 붙게되면 Class로 접근가능하다.

- 대표적인예제 public static void main(String[] args)


abstract와 Interface의 차이

SuperClass와 subClass로 구성된건 같다.

서브클래스는 슈퍼클래스의 큰 영향을 받는다.


abstactClass

- 슈퍼클래스가 어느정도 구현되어있고 나머지를 서브클래스에서 구현해야할때사용한다.

- single inheritance이다.(다중상속불가능)

- 모든 접근제한자에서 가능하다.

- 일반적인 변수,상수가 사용가능하다.

- abstractMethods,concreteMethods 둘다 가능하다.


Interface

- 실질적인 구현이없는 abstractMethods만있는 빈깡통클래스

- 일종의 규약을 위해 생성한다.

- 상속이아닌 구현으로 다중구현이 가능하다.

- public만 가능하다.

- 오직 상수만이 가능하다.

- abstractMethods만가능하다.

람다식

자바8이상에서 사용가능하다.

기존 익명 클래스 대신사용하는 것.

 람다식은 여러줄의 코드를 메소드안에 넣을때 사용한다.

 첫번째 코드 
- 람다식없었을때(java6,7)때 사용방법이다. 

 두번째 코드
- 람다식 사용예이다.
 



Mybatis Mapper 인터페이스란?


Mapper 인터페이스란?

여러 Mapper 인터페이스 작성시 설정한다.


Mapper 인터페이스란?

- 매핑파일에 기재된 SQL을 호출하기 위한 인터페이스이다.

- Mybatis 3.0부터 생겼다.

- 매핑파일에 있는 SQL을 인터페이스로 호출한다.


Mapper 사용하지않았을시?

- session.selectOne("userNS.selectUserById", id); 형식 이였다.

- 네임스페이스+"."+SQL ID 로 지정해야한다.

- 문자열로 작성하기때문에 버그가 생길 수 있다.

- IDE에서 제공하는 code assist를 사용할 수 없다.


Mapper 사용했을때

- Mapper 인터페이스 개발자가 직접작성한다.

- 패키지 이름+"."+인터페이스이름+"."+메서드이름이 네임스페이스+"."+SQL의 ID를 설정해야 한다.

- 네임스페이스 속성에는 패키지를 포함한 Mapper 인터페이스 이름 형식이다.

- SQL ID 에는 매핑하는 메서드 이름을 지정하는 것.


Mapper 인터페이스 작성

반드시 인터페이스로 선언해주어야한다.

네임스페이스 명은 패키지포함 인터페이스이름으로 작성. 

ex)<mapper namespace="myspring.user.dao.UserMapper">

메서드명은 SQLID와 동일하게작성.


사용하는법

-bean 추가

-xml네임스페이스 설정


-DAO에 autowired



-Mapper인터페이스 메소드명은 네임스페이스 ID랑 맞출것.

인터페이스

XML


여러개의 Mapper 설정 방법

- MapperScannerConfigurer사용한다.

- 위에 org.mybatis.spring.mapper.MapperFactoryBean 을 이용시 Mapper등록시 갯수가 많아지면일일이 정의해야하는 단점이 있다.

- DI컨테이너에 등록된다.

- MapperScannerConfigurer 이용하면 지정한 패키지 아래 모든 인터페이스가 Mapper 인터페이스로 간주된다.

dao등 인터페이스도 등록되어 에러가 생길 수 있다.


다른 인터페이스는 등록안되게 하는법

빈에 등록하기


annotation파일생성


기존 Mapper에 어노테이션 등록



'개발 소발 > 개발 Spring' 카테고리의 다른 글

SpringMVC란?  (0) 2018.01.11
MVC패턴이란?  (0) 2018.01.11
Mybatis 셋팅이란?  (0) 2017.12.21
MyBatis란?  (0) 2017.11.27
AOP어플리케이션 작성 (annotation)이란?  (0) 2017.11.27

+ Recent posts