Life Developer
인생 개발자
Developer (136)
is-a 관계와 has-a 관계

is-a관계와 has-a관계는 매일 헷갈린다.

 

개념이 딱 안잡혀 있어서 그렇다.

 

is-a는 ~는 ~다. 라고 해석된다.

 

예를들어 비행기는 탈것이다.

자동차는 탈것이다.

배는 탈것이다.

 

이게 is-a 관계이다.

 

쉽게 말해서 is-a관계는 상속관계를 뜻한다.

 

그럼 has-a관계는 무엇일까?

 

has-a 는 ~는 ~을 가진다. 라고 해석된다.

 

예를들면 기범이는 이름과 나이와 차를 가진다.

너는 이름과 나무를 가진다.

 

이것을 코드로 나타내면

class Gibeom{

       private String name;

       private int age;

       private Car car;

}

 

class you{

       private String name;

       private Tree tree;

}

 

이렇게 나타낼수 있다.

 

객체와 멤버변수의 관계라고 생각하면 될것 같다.

'Developer' 카테고리의 다른 글

트랜잭션이란? (Transaction)  (0) 2020.07.23
AOP의 용어  (0) 2020.07.23
weaving이란 무엇인가?  (0) 2020.07.23
AOP란 ? (Aspect Oriented Programming)  (0) 2020.07.23
DI (Dependency Injection) 의존성 주입  (0) 2020.07.23
  Comments,     Trackbacks
weaving이란 무엇인가?

Aspect란 핵심기능은 아니지만, 많은 오브젝트에 걸쳐서 필요한 부가기능을 추상화 해놓은것이다.

 

위빙이란 Aspect 클래스에 정의 한 Advice 로직을 타깃에 적용하는 것을 의미한다.

 

쉽게 말해서 공통코드(advice)를 핵심 로직 코드에 삽입하는 것이 위빙이다.

'Developer' 카테고리의 다른 글

AOP의 용어  (0) 2020.07.23
is-a 관계와 has-a 관계  (0) 2020.07.23
AOP란 ? (Aspect Oriented Programming)  (0) 2020.07.23
DI (Dependency Injection) 의존성 주입  (0) 2020.07.23
IOC??제어의 역전?  (0) 2020.07.23
  Comments,     Trackbacks
AOP란 ? (Aspect Oriented Programming)

AOP를 풀어서 번역하면 관점 지향 프로그래밍이다.

 

프로그래밍을 하다보면 공통적인 기능이 많이 생긴다.

 

이런 공통기능을 모든 모듈에 적용하기 위한 방법으로 상속을 이용한다.

 

상속도 좋은 방법이지만, java에서는 다중 상속이 힘들다.

 

그래서 AOP가 등장했다.

 

AOP를 사용함으로서 핵심 기능과 공통 기능을 분리 시킬수가 있다.

'Developer' 카테고리의 다른 글

is-a 관계와 has-a 관계  (0) 2020.07.23
weaving이란 무엇인가?  (0) 2020.07.23
DI (Dependency Injection) 의존성 주입  (0) 2020.07.23
IOC??제어의 역전?  (0) 2020.07.23
쓰레드란  (0) 2020.07.23
  Comments,     Trackbacks
DI (Dependency Injection) 의존성 주입

객체간 의존하는 것이 아니라 외부에서 주입하는 개념이다.

 

생성자를 이용한 의존성 주입

setter메소드를 이용한 의존성 주입

초기화 인터페이스를 이용한 의존성 주입

'Developer' 카테고리의 다른 글

weaving이란 무엇인가?  (0) 2020.07.23
AOP란 ? (Aspect Oriented Programming)  (0) 2020.07.23
IOC??제어의 역전?  (0) 2020.07.23
쓰레드란  (0) 2020.07.23
제네릭(generic)이 도대체 뭘까? 제대로 알고가자  (0) 2020.07.23
  Comments,     Trackbacks
IOC??제어의 역전?

스프링 쓰기 전에는 개발자가 객체와 메서드 등을 생성 관리한다.

 

그러나 스프링에서는 프로그램의 흐름을 프레임워크가 주도를 한다.

 

객체의 생성, 생명주기 등을 컨테이너에서 관리를 한다는 것이다.

 

이처럼 제어권이 컨테이너로 넘어가게 되고 이를 제어의 역전이라고 한다.

'Developer' 카테고리의 다른 글

AOP란 ? (Aspect Oriented Programming)  (0) 2020.07.23
DI (Dependency Injection) 의존성 주입  (0) 2020.07.23
쓰레드란  (0) 2020.07.23
제네릭(generic)이 도대체 뭘까? 제대로 알고가자  (0) 2020.07.23
SID와 service name 차이  (0) 2020.07.23
  Comments,     Trackbacks
쓰레드란

OS에서 크롬을 이용해 인터넷을 하면서 동시에 엑셀문서를 작성도 하고 유튜브도 시청하기도 한다.

 

동시에 여러 프로그램이 실행이되도 CPU는 시간을 분할하여 프로세스마다 우선권을 주어 작업을 처리한다.

 

이런 운영체제에서 실행되는 하나의 프로그램 단위를 프로세스 라고한다.

 

쓰레드는 프로세스 내에서 실행되는 세부 작업단위이다.

 

프로세스가 하나 이상의 쓰레드를 사용한다면 멀티 쓰레드라고 부른다.

 

 

프로세스 - 운영체제에서 실행되는 하나의 프로그램 단위

쓰레드 - 프로세스 내에서 실행되는 세부 작업단위

  Comments,     Trackbacks
제네릭(generic)이 도대체 뭘까? 제대로 알고가자

제네릭이 자바에서 아주 중요하다.

 

과연 제네릭이 뭘까?

 

제네릭이란 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법이다.

 

타입을 파라미터화 해서 컴파일시 구체적인 타입이 결정되도록 하는것이다. (자바 5부터 추가된 기능)

 

어렵다.

 

제네릭은 컬렉션에 널리 사용된다. 간단하게 컬렉션 ArrayList와 List를 통해 알아보자.

 

// ArrayList

ArrayList<String> arrList = new ArrayList<String>();

 

// List

List<Integer> list = new ArrayList<Integer>();

 

현재 ArrayList를 보면 <>안에 String , List의 <>안에Integer가 들어가 있다.

 

이 <>를 제네릭이라고 하는데, 이 <>에 어떠한 타입을 선언해주어 해당 ArrayList, List등이 사용할 객체의 타입을

 

지정해준다는 뜻이다. <T> 이런 것을 타입 파라미터라고 한다.

 

즉, 다룰 객체의 타입을 미리 명시하여 객체의 형변환을 할 필요가 없게하고, 내가 사용하고 싶은 데이터 타입만

 

사용할 수 있게 해준다는 것이다.

 

 

 

public class Generics {

 

    public static void main(String[] args) {

        

        ArrayList<Sports> arrList = new ArrayList<Sports>();

        arrList.add(new Sports());

        arrList.add(new Soccer());

        arrList.add(new Baseball());

        

        Sports sports = arrList.get(0);

        Soccer soccer = (Soccer) arrList.get(1);

    }

 

}

 

class Sports{}

 

class Soccer extends Sports{}

 

class Baseball extends Sports{}

 

 

"제네릭이란 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법이다."

에서 위 예제의 클래스 내부는 ArrayList클래스가 될것이고 외부에서 결정한 데이터 타입이 Sports가 되는것이다.

그렇다면 ArrayList 클래스를 추측해볼수가있다.

ArrayList <T>{ ~~ } 라는것을 추측을 해볼수가 있다.

 

 

제네릭 사용시 장점

1. 타입의 안정성 - 의도하지 않은 타입의 객체가 저장되는 것을 막고, 다른 타입의 객체로 인한 타입형태가 맞지 않아

발생하는 문제를 없애준다. (컴파일시 강한 타입체크를 할수 있다.)

2. 불필요한 형변환을 줄여 코드가 간결함 - 타입을 미리 명시함으로서 다른 타입의 객체가 저장되지 않아서 객체를

꺼내 사용할때 형변환으로 타입을 맞출 필요가 없어서 코드가 간결해진다.

 

 

비제네릭 - public class Box{} 은 안보이지만 아래처럼 extends Object가 생량되어있는것이다.

이렇게 되면 아래처럼 사용시 빈번한 타입변환이 발생되며 성능이 저하된다.

모든 객체는 Object의 자식이므로 모두 넣을수 있지만 빼서 사용할때는 형변환을 꼭해야한다. (비효율적)

 

 

타입 파라미터 T를 만들어도 box 생성시 타입을 구체적으로 정하지 않으면 자동으로 <Object>가 붙는다.

 

효율적인 제네릭 사용법

 

'Developer' 카테고리의 다른 글

AOP란 ? (Aspect Oriented Programming)  (0) 2020.07.23
DI (Dependency Injection) 의존성 주입  (0) 2020.07.23
IOC??제어의 역전?  (0) 2020.07.23
쓰레드란  (0) 2020.07.23
SID와 service name 차이  (0) 2020.07.23
  Comments,     Trackbacks
SID와 service name 차이

SID는 하나의 인스턴스를 말한다. (인스턴스 이름)

SID가 필요한 이유는 한 서버에 여러개의 인스턴스가 기동될 수 있으르모 구별하는 태그가 필요해서 그렇다.

따라서 SID는 DB서버에 필요한 정보이다.

 

service name은 여러개의 인스턴스를 모아 하나의 서버 혹은 시스템을 구성한 것을 말한다.

서버 한대에 두개의 인스턴스를 묶어 사용할 경우 service name을 가지게한다.

'Developer' 카테고리의 다른 글

AOP란 ? (Aspect Oriented Programming)  (0) 2020.07.23
DI (Dependency Injection) 의존성 주입  (0) 2020.07.23
IOC??제어의 역전?  (0) 2020.07.23
쓰레드란  (0) 2020.07.23
제네릭(generic)이 도대체 뭘까? 제대로 알고가자  (0) 2020.07.23
  Comments,     Trackbacks