branch
source code의 개별적 작업 공간이며 각 branch마다 독립성이 보장된다.
일반적으로 master branch에는 최신버전을 유지하고 해당 branch에서는 code edit을 하지 않는다.
check out
branch간 이동 한다.
Merge
다른 branch의 source code를 내 branch로 가져온다.
source code를 가져오는 작업이기에 동기화 문제가 발생 가능하다!, 항상 master에서 최신 버전을 내 branch로 merge한 후 작업하기
conflict
최신 source code가 아닌 code를 merge 하였을때 발생하는 문제
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
repository
source code를 관리하는 저장소
commit
내 branch의 source code 변경 사항을 repository에 알려주는 작업
git 주의사항
1. master => no edit
2. branch new work는 최신버전 merge후 작업
3. merge는 가져오는 경우니 신중하게 사용
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
public class HelloTestApp01 {
///main method
public static void main(String[] args) {
Hello hello = new Hello();
hello.printMessage();
}
}
"hello"라는 메시지를 출력해주는 Hello class를 100개가 넘는 class가 dependency관계로 사용하고있다 라고 가정해보자.
만약 Hello라는 class를 다른 class로 변경한다면 100개의 class를 수정해야한다.
public class HelloTestApp02 {
public static void main(String[] args) {
HelloFactory helloFactory = HelloFactory.getInstance();
helloFactory.setConfigResource("./src/main/resources/config/hello.properties");
Hello hello = helloFactory.getBean("instance.one");
hello.printMessage();
}
}
class를 인스턴스화하여 반환하는 helloFactory class를 만든 뒤 해당 factory에 모든 bean들의 이름과 위치를 key : value로
저장해놓은 properties파일을 전달하면 helloFactory는 "instance.one"에 해당하는 bean을 반환한다.
따라서 100개의 class를 수정할 일 없이 properties 파일에 "instance.one"에 해당하는 bean만 변경하면 모든 class의
bean을 변경 가능하다.
public class HelloTestApp03UseSpring {
public static void main(String[] args) {
BeanFactory factory = new XmlBeanFactory( new FileSystemResource("./src/main/resources/config/hello.xml"));
Hello hello = (Hello)factory.getBean("hello");
hello.printMessage();
}
}
framework는 이러한 문제 영역을 해결하기 위해 BeanFactory라는 라이브러리를 제공하여 우리가 factory를 직접 만들지 않고
위 기능을 사용 할 수 있으며 원리를 알고있다면 framework를 사용해야하는 이유이다.
BeanConatainer는 이러한 Bean의 생성, 의존성 주입뿐 아니라 생명주기까지 관리해주는 container이다.
spring framework의 Bean Container는 bean의 생성, 실행, 의존성 주입, 생명주기 관리 역할을 수행한다
이는 code에 대한 제어권을 사용자가 가지고있는것이 아니라 Container가 가지고있기에 제어의 역전이 발생하며 이를
IOC(Inversion of control)이라 한다.
제어의 역전에 의해 의존성 주입은 코드 내부에서 발생하는것이 아닌 외부에서 발생하게된다.
외부에서 dependency를 주입해주는 방법이 constructor injection과 setter injection이다.
public class DiceTestApp02 {
public static void main(String[] args) {
//constructor injection
Player02 player01 = new Player02(new DiceAimpl());
//setter injection
Player02 player02 = new Player02();
player02.setdice(new DiceAimpl());
}
}
Q. Build Pathe란
A. build란 설정파일, 실행파일, 기타 리소스들을 모아 실행 가능한 파일로 변경하는 과정이다
BuildPath란? build를 하기 위해 필요한 요소들의 위치를 지정해둔 것이다.