목록Tutorials (196)
KoreanFoodie's Study
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cxnIus/btromR0pKq0/iO5DA7Lapb1kWPK0Jwy2Sk/img.png)
함수의 오버로딩 (function overloading) 함수의 오버로딩은, 인자로 들어오는 변수의 타입에 따라 이름이 같은 함수들 중 적합한 함수를 호출해 주는 것을 의미한다. 이때, 인자를 찾는 과정은 다음과 같다. 1 단계 : 자신과 타입이 일치하는 함수를 찾는다. 2단계 : 정확히 일치하는 타입이 없는 경우, 아래와 같은 형변환을 통해 일치하는 함수를 찾는다. Char, unsigned char, short 는 int로 변환된다. Unsinged Short는 int의 크기에 따라 int 혹은 unsigned int로 변환된다. Float는 double로 변환된다. Enum은 int로 변환된다. 3단계 : 위와 같이 변환해도 일치하는 것이 없다면 아래의 좀 더 포괄적인 형변환이 일어난다. 임의의 숫..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/xWwp1/btroptx0mfX/KTqVjbWkSSzIKJbOcQOX5K/img.png)
객체란? 객체는 인스턴스 변수(instance variable)과 인스턴스 메소드(instance method)로 이루어져 있다. 클래스 클래스는 객체를 찍어내는 '설계도'이다. 클래스 내부의 변수와 함수를 각각 멤버 변수(member variable)과 멤버 함수(member function)이라고 부른다. 멤버 변수와 함수는 접근 지정자를 설정할 수 있다. public : 외부에서 접근 가능 protected : 상속된 클래스만 접근 가능 private : 외부에서 접근 불가능 사실 C++에서 클래스와 구조체의 유일한 차이는 바로 접근 지정자에 있다!
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/za6Xi/btrogvjNjWi/B9LwABmVRW6owBiHQa3pDK/img.png)
new와 delete c에 malloc과 calloc이 있다면, C++에는 new와 delete가 있다. int* p = new int; *p = 10; delete p; 만약 지역변수를 delete로 해제하려 한다면 Heap이 아닌 공간을 해제하려 한다는 경고 메시지가 나타난다. 컴파일러는 변수를 가까운 곳에서 찾는다. int a = 4; { std::cout
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/c4KA8u/btrormFiiMl/JKEStDUsQ8ehDJCiec2xyK/img.png)
참조자 (레퍼런스) 레퍼런스(reference)는 & 기호를 이용해서 표기한다. #include int main() { int a = 3; int& another_a = a; } 참조자는 별명, 즉 또다른 이름이다. 레퍼런스는 반드시 정의 시 누구의 별명이 될 것인지 지정해야 한다. 또한, 레퍼런스가 한 번 별명이 되면 절대로 다른 이의 별명이 될 수 없다! int a = 10; int& another_a = a; int b = 3; another_a = b; 제일 마지막 줄은, 실제로 "a=b"와 같은 의미를 지닌다. 또한, 레퍼런스는 메모리 공간 속에 존재하지 않을 수도 있다. 이는 레퍼런스를 위해 새로운 공간을 할당할 필요가 없을 수도 있다는 것이다. 참조자의 참조자? int a = 1; int& ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bZnAxy/btrohTrdn9n/F2wKFfKMSiGuanWffGkKW1/img.png)
이름 공간 (namespace) namespace는 정의된 객체가 어디 소속인지를 지정해준다. #include "header1.h" #include "header2.h" int main() { header1::foo(); header2::foo(); } 위의 예시처럼, header1과 header2에 같은 이름의 함수 foo( )가 정의되어 있더라도 namespace를 사용하면 구분해서 사용할 수 있다. 또한, "using namespace std;"와 같은 방식은 추천하지 않는다. std에는 수많은 함수들이 포함되어 있기 때문에, 충돌이 일어날 수 있기 때문이다. 이름 없는 이름 공간 이름 없는 이름 공간을 설정할 경우, 정의된 것들은 해당 파일 안에서만 접근할 수 있게 된다. 이 경우 마치 stati..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/CN7dG/btrmtVxfa3i/p7BELJHMh7JZ1uZ1bZWF5k/img.jpg)
Gradle (그레이들)? 그림 : 빌드 툴의 진화와 그레이들의 위치 그레이들은 크로스 플랫폼 스크립트 언어(JVM 언어)인 그루비를 기반 기술로 선택했다. 그레이들 개요 그레이들은 Build Automation Evolved 라고 소개된다. 그레이들은 각종 프로젝트 자동화에 적용될 수 있으며, 앤트의 유연성, 메이븐의 의존관계 관리와 규칙 기반 등의 기존 빌드 툴의 장점을 가져왔다. 또한 그루비 DSL(Domain-Specific Language)을 도입해 효율적인 빌드를 실현했다. 그래이들의 공식 사이트, 코드, 사용자 가이드 그레이들은 빌드 스크립트 생산성이 높고(list literal, map literal, closure 등), 빌드 순서를 제어하기 쉬우며, 멀티 프로젝트에 대응하고, 컴포넌트를..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Kd3Sv/btrl93ayyth/CAKk5BXfetePMaEMO2QJPk/img.jpg)
비즈니스 컴포넌트 사용하기 다음 그림이 바로 핵심이자, "숲"에 해당하는 구조이다. 스프링 컨테이너의 관계 톰캣 서버를 처음 구동하면 ① web.xml 파일을 로딩하여 서블릿 컨테이너가 구동된다. 그리고 ② 서블릿 컨테이너는 web.xml 파일에 등록된 ContextLoaderListener 객체를 생성(Pre Loading)한다. 이때 ContextLoaderListener 객체는 resources 소스 폴더에 있는 business-layer.xml 파일을 로딩하여 스프링 컨테이너를 구동하는데, 이를 'Root 컨테이너'라고 한다. 그리고 이때, Service 구현 클래스나 DAO 객체들이 메모리에 생성된다. 그리고 사용자가 로그인 버튼을 클릭하여 ‘.do’ 요청을 서버에 전달하면 서블릿 컨테이너는 D..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dTWdQB/btrl4QbGjOM/5RUwVsmuzmOrHUMCNgONl1/img.jpg)
Transaction 관리 스프링과 비교되는 EJB는 모든 비즈니스 메소드에 대한 트랜잭션 관리를 EJB 컨테이너가 자동으로 처리해 준다. 스피링에서도 마찬가지의 기능이 가능하다. 스프링의 트랜잭션 설정에서는 앞에서 학습한 AIO가 사용된다. 그런데 XML 기반의 AOP 설정만 사용할 수 있고, 어노테이션은 사용할 수 없다. 그리고 애스펙트를 설정하는 것도 엘리먼트를 사용하지 못하고 엘리먼트를 사용해야 한다. 1. 트랜젝션 네임스페이스 등록 2. 트렌잭션 관리자 등록 3. 트랜잭션 어드바이스 설정 엘리먼트는 다음과 같은 속성을 가질 수 있다. 4. AOP 설정을 통한 트랜잭션 적용 위의 설정들을 통해 트랜잭션이 동작하는 것을 그림으로 표현하면 다음과 같다. JSP : Scriptlet. 그냥 자바 코드 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/LuzsV/btrlV0lmUMV/z1oAjmZsmSL4awAUwTSaYk/img.jpg)
IoC를 이용한 비즈니스 컴포넌트 개발 : 4개의 자바 파일 1. VO(Value Object) 클래스 작성 VO(Value Object) 클래스는 레이어와 레이어 사이에서 관련된 데이터를 한꺼번에 주고받을 목적으로 사용하는 클래스. VO 클래스는 데이터베이스에 생성되어 있는 테이블의 데이터를 매핑하기 위해서 사용한다. 2. DAO(Data Access Object) 클래스 SQL 명령어들 3. Service 인터페이스 4. Service 구현 클래스 @Service, @Repository, @Controller 어노테이션 @Component를 목적에 따라 나눔 (클래스별로 @Repository, @Service, @Data) AOP(Aspect Oriented Programming) IoC가 결합도와 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/IC29j/btrlLvl1tQJ/1l7k1OqFocP1ZQfXdkvToK/img.jpg)
꼭! 알아야 할 개념 IoC : Inversion of Control AOP : Aspect Oriented Programming MVC : Model-View-Controller Java, JDBC, HTML, Servlet/JSP 프레임워크 프레임워크는 뼈대이다. 뼈대는 바꾸는 것이 아니라 이용하는 것이다. 하나의 틀이라고 봐도 됨 메타 데이터는 주로 XML. 아키텍처에 해당하는 클래스를 콜드 스팟(Cold Spot) 이라고 하며, JAR(Java Archive) 파일을 의미한다. POJO(Plaing Old Java Object)란? POJO란 말 그대로 평범한 옛날 자바 객체를 의미한다. 대표적인 Not POJO 클래스가 Servlet이나 EJB 클래스다. Servlet 클래스는 우리 마음대로 만..