[ELF] hash section

[ELF] hash section

그럼 실제로 해당 값들이 동작하는 것들을 체크해 보자라고 생각을 하였으나 사실 의미가 없다. 그렇다면 .hash값을 만드는 방법에 대해서는 알아볼수 있을것 같다. 여기에서 nbucket의 값을 어떻게 정하느냐에 따라서 사실 의미가 많이 달라진다. linker가 최종적으로 .hash의 값을 선택한다고 한다. 그렇다면 모든 symbol을 알고 있으며 hash 알고리즘도 알고있는 상태가 된다. 그렇다면 여기에서 nbucket은 결국 얼마만큼 분포가 골고루 되어있어서 performace상에 이점을 가져올수 있느냐가 그 핵심이 될것으로 생각된다. chain의 연결이야 nbucket만 알고 있다면 아주 간단한 문제이기 때문에 별다른 어려움은 없다. 사실 nbucket을 1로 설정하고 bucket[0] = 0 이며 chain 계속해서 1씩 증가하다가 더 이상 symbol이 없을때 0을 반환한다면 모든 symbol을 loop도는 것과 동일한 알고리즘이 되어버린다.

6-sass로 작성하기
6-sass로 작성하기

스프링 컨테이너 생성

ApplicationContext applicationContext new AnnotationConfigApplicationContext(AppConfig.class);에서 파라미터가AppConfig.class이기 때문에 AppConfig를 설정 정보로 삼아 스프링 컨테이너를 생성한다. 스프링 빈 등록 AppConfig에서 @Bean어노테이션이 붙은 메소드들을 실행시켜 반환값을 빈에 등록하고, 빈의 이름을 메소드명으로 삼는다. //@Bean(name=”memberService2″)와 같이 빈 이름을 직접 부여할 수 도 있다.

컨테이너에 등록된 모든 빈 조회
컨테이너에 등록된 모든 빈 조회

6-sass로 작성하기

필수요소: node-sass npm install node-sass// Box.modulscss@import ”./sharescss”;.box { height: 50px; color: $infoColor; // CSS를 자바스크립트 내에서 만들고 사용. 모든 개발자가 JS를 다룰 수 있다면 좋은 선택이지만, 마크업 전담하시는 분이 따로 있다면 비추!

const BoxCommon = styled.div` height: 50px;`;const BoxBig = styled(BoxCommon)` width: 200px;`;미리 만들어둔 BoxCommon을 BoxBig에서 불러와서 활용할 수 있다.

이처럼 확장해서 또 다른 컴포넌트를 만들기 쉽다는 것이 장점이다.

컨테이너에 등록된 모든 빈 조회

ac.getBeanDefinitionNames()를 통해 등록된 모든 빈들의 이름을 반환받고,

beanDefinitionNames라는 문자열 배열에 저장한다.

그후, 반목문을 통해 빈의 이름으로 빈에 등록된 객체를 꺼내와서 해당 객체를 출력한다. 실행시 위와 같은 결과가 나오며, 스프링이 내부에서 사용하는 빈을 포함한 모든 빈이 출력된다.

드래그한 부분이 스프링이 내부에서 사용하는 빈이다.

다음은 findApplicationBean메소드를 살펴보자.

해당 메소드는 스프링이 내부에서 사용하는 빈을 제외한, 내가 직접 등록한 빈만 출력하고자 한다.

그리고 대략적인 동작 방식은 findAllBean와 비슷하다.

JdbcTemplate

이번에는 jdbctemplate을 이용한 레포지토리 작성을 알아보자. 라이브러리등 설정은 순수 jdbc와 동일하다. 그럼 먼저 코드를 보겠다. 위 사진에서 한 행을 말한다. 즉 한 노드에 대한 정보를 뜻한다고 볼 수 있다. 정리하자면 memberRowMapper는 DB에서 한 노드를 가져와 객체로 포장하고 반환한다고 볼 수 있다. findById와 findByName 메소드를 살펴보자.

두 메소드 모두 쿼리문과 memberRowMapper를 통해 DB에서 id 혹은 name이 일치하는 노드들을 검색 후 List로 가져오고,

findAny를 통해 List내 아무 객체나 반환한다.

findAll은 더 간단하다.

@Configuration과 싱글톤

AppConfig를 환기해보자. 한번 검증해보자. 3개의 MemoryMemberRepository인스턴스들이 모두 같은 것을 알 수 있다. AppConfig를 보면 분명 memberRepository가 3번 호출되야 하지만, 테스트 코드의 결과는 이와 상충된다. 단순 코드상으로는 이해가 되지 않는 일이다.

스프링 컨테이너가 어떤 마법같은 일을 벌이길래 이러한 결과가 나오는걸까? 7. @Configuration과 바이트코드 조작의 마법 정답은 @Configuration어노테이션에 있다.

한번 AppConfig의 @Configuration어노테이션을 지워보자. 일단 다음 테스트 코드를 실행해보자. 또 그렇기에 싱글톤을 보장할 수 있었던 것이다.