레이블이 디렉토리서비스인 게시물을 표시합니다. 모든 게시물 표시
레이블이 디렉토리서비스인 게시물을 표시합니다. 모든 게시물 표시

2013년 10월 24일 목요일

[닷넷,C#4.0강좌]C# 델리게이트 Action Delegate Action 델리게이트는 Func 델리게이트와 거의 유사하다. 차이점이라면...

[닷넷,C#4.0강좌]C# 델리게이트 Action Delegate 

Action 델리게이트는 Func 델리게이트와 거의 유사하다. 차이점이라면 반환 형식이 없다는 것이다. 이 Action 델리리게이트 역시 닷넷4.0 프레임워크에는 대략 17가지 준비되어 있다.
 
public delegate TResult Action< >()
public delegate TResult Func<in T >(T arg)
public delegate TResult Func<int T1, in T2>(T1 arg, T2 arg)
public delegate TResult Func<int T1, in T2, in T3 >(T1 arg, T2 arg, T3 arg)
……
……
public delegate TResult Func<in T1,,,in T16>(T1 arg, T2 arg, T3 arg,,, T16 arg)
Func 델리게이트와는 반환값이 없는 것이 특징이며 형식 매개변수는 모두 입력 매개변수 이다.
 
[사용 예문]
 
입력 매개 변수가 없는 경우…
 
Action action1 = () => Console.WriteLine(“No Parameter Action Delegate”);
action1();
 
입력 매개 변수가 두개인 경우…
 
int sum=0;
 
//입력 매개변수는 둘, 더한 결과를 밖에서 선언한 sum에 저장
Action<int, int> action2 = (x, y) => sum=x*y;
action2(1,2); 
Console.WriteLine(“1+2={0}”, sum);      //9 리턴
 

[예제]
 
using System;
namespace Lambda
{
    class Program
    {
        delegate int Sum(int[] arg);
        static void Main(string[] args)
        {
            Action action1 = () => Console.WriteLine("No Parameter Action Delegate");
            action1();
            int ret = 0;
            Action<int> action2 = (x) => ret = x * x;
            action2(3);
            Console.WriteLine("action2(3), 3*3={0}", ret);
            Action<double, double> action3 = (x, y) =>
            {
                double d = x / y;
                Console.WriteLine("Action<t1, t2>({0},{1}) : {2}", x, y, d);
            };
            action3(8, 4);
        }
    }
}
 

[결과]
No Parameter Action Delegate
action2(3), 3*3=9
Action<t1, t2>(8,4) : 2

2013년 10월 21일 월요일

자바 싱글톤, 쓰레드 예제

자바 싱글톤, 쓰레드 예제

public class Singleton {
    private static Singleton singleton = new Singleton();
    private Singleton() {
        System.out.println("Sington Class의 인스턴스 생성!");                   
    }
    public static Singleton getInstance() {       
        return singleton;
    }                                        
}
 
public class Main extends Thread {
    public static void main(String[] args) {
        System.out.println("Start.");       
        Singleton obj1 = Singleton.getInstance();
  Singleton obj2 = Singleton.getInstance();
        if (obj1 == obj2){
   System.out.println("obj1 == obj2");
        }
  else {
   System.out.println("obj1 != obj2");
  }
    }
}
 
=======================================
 
 
public class Singleton {
    private static Singleton singleton = null;
    private Singleton() {
        System.out.println("인스턴스 생성...");
        slowdown();                            
    }
    public static Singleton getInstance() {
        if (singleton == null) {
            singleton = new Singleton();
        }
        return singleton;
    }
    private void slowdown() {                  
        try {                                  
            Thread.sleep(10);                
        } catch (InterruptedException e) {     
        }                                      
    }                                          
}
 
 
public class Main extends Thread {
    public static void main(String[] args) {
        System.out.println("Start.");
        new Main("A").start();
        new Main("B").start();
        new Main("C").start();
        System.out.println("End.");
    }
    public void run() {
        Singleton obj = Singleton.getInstance();
        System.out.println(getName() + ": obj = " + obj);
    }
    public Main(String name) {
        super(name);
    }
}

2013년 10월 19일 토요일

[Spring Container에서 자바빈 로딩하는 방법2가지]Spring Framework Lazy Loading, Pre Loading, BeanFactory, ApplicationContext

[Spring Container에서 자바빈 로딩하는 방법2가지]Spring Framework Lazy Loading, Pre Loading, BeanFactory, ApplicationContext
 
스프링 프레임워크에서 자바빈을 로딩(인스턴스로 만든 후 바인딩)하는 데 있어 두가지 방법을 제공한다.

두 방법은 lazy biding, pre-loading 이다.
 
1. Lazy Binding
 
자바빈이 다른 메소드 또는 클래스의 요청에 의해 호출되는 시점에 로드되는 방법이다.

org.springframework.beans.factory.BeanFactory와 하위클래스들이 사용하는 방법으로 스프링 컨테이너에서는 관련빈을 호출되는 시점에 로딩한다.
 
아래 예를 보자.
 
BeanFactory factory = new XmlBeanFactory(
                        new InputStreamResource(
                        new FileInputStream("onj.xml")));    
             
OrderManager orderManager = (OrderManager) factory.getBean("orderManager"); 

우선 위 예문의 경우 onj.xml이 메모리에 로딩되더라도 orderManager 빈은 인스턴스화 되지 않는다.  즉 getBaean("orderManager")하는 순간 메모리로 올라오는 것이다.

결국 getBean 메소드가 호출되는 시점에 할 일이 많아 지는 것이다.

2. Pre-Loading
 
컨테이너에서 XML 파일을 로딩하자 마자 정의된 자바빈들을 로딩하는 방법.

org.springframework.context.ApplicationContext가 수행한다.
 
//모든 싱글톤 자바빈들이 메모리로 로딩
ApplicationContext context =
            new ClassPathXmlApplicationContext("onj.xml");
           
//필요한 빈을 리턴           
OrderManager orderManager = (OrderManager) context.getBean("orderManager");

2013년 10월 13일 일요일

[자바교육]자바 싱글톤, 쓰레드 예제

자바 싱글톤, 쓰레드 예제

public class Singleton {
    private static Singleton singleton = new Singleton();
    private Singleton() {
        System.out.println("Sington Class의 인스턴스 생성!");                    
    }
    public static Singleton getInstance() {        
        return singleton;
    }                                         
}
 
public class Main extends Thread {
    public static void main(String[] args) {
        System.out.println("Start.");        
        Singleton obj1 = Singleton.getInstance();
  Singleton obj2 = Singleton.getInstance();
        if (obj1 == obj2){
   System.out.println("obj1 == obj2");
        }
  else {
   System.out.println("obj1 != obj2");
  }
    }
}
 
=======================================
 
 
public class Singleton {
    private static Singleton singleton = null;
    private Singleton() {
        System.out.println("인스턴스 생성...");
        slowdown();                             
    }
    public static Singleton getInstance() {
        if (singleton == null) {
            singleton = new Singleton();
        }
        return singleton;
    }
    private void slowdown() {                   
        try {                                   
            Thread.sleep(10);                 
        } catch (InterruptedException e) {      
        }                                       
    }                                           
}
 
 
public class Main extends Thread {
    public static void main(String[] args) {
        System.out.println("Start.");
        new Main("A").start();
        new Main("B").start();
        new Main("C").start();
        System.out.println("End.");
    }
    public void run() {
        Singleton obj = Singleton.getInstance();
        System.out.println(getName() + ": obj = " + obj);
    }
    public Main(String name) {
        super(name);
    }
}
 
 

오라클자바커뮤니티에서 설립한 개발자교육6년차 오엔제이프로그래밍 실무교육센터(오라클SQL,튜닝,힌트,자바프레임워크,안드로이드,아이폰,닷넷 실무개발강의)  



2013년 10월 6일 일요일

[JAVA객체지향]자바,다형성,오버로딩,오버라이딩, 캡슐화, Late binding 1. 다형성(Polymorphism) 상속을 ...

[JAVA객체지향]자바,다형성,오버로딩,오버라이딩, 캡슐화, Late binding에 대해 알아봅니다.
1. 다형성(Polymorphism)
상속을 받은 것을 그대로 사용하지 않고 입맛에 맞게 바꾸어 줄 수 있도록 하는 것
다형성을 위해 자바에서는 메소드 overriding 과 메소드 overloading을 제공 한다.
상속계층 상에서 어떤 객체의 어느 메소드를 호출할 것인지를 결정하는 객체의 능력을 다형성 이라 한다.
사인곡선을 그리는 함수가 있다고 할 때 사용자는 파라미터로 radian이나 degree값을 넣게 되지만 둘 다 처리할 수 있다. 이것은 sine(int degrees)나 sine(float Radians)와 같이 동일 이름의 함수가 다른 파라미터로 두 번 선언되었기 때문이다.
오버로딩 or 오버라이딩을 통해 구현
2. 오버로딩(Overloading)
동일한 함수의 이름 사용 가능, 같은 클래스 내에 같은 이름의 생성자나 메소드를 사용하는 행위,매개변수의 개수와 타입이 달라야 한다

3. 오버라이딩
상위 클래스에서 정의된 함수를 하위 클래스에서 재 정의, 기존 클래스의 메소드 구현 부분만 약간 변화시켜 새로운 클래스를 생성할 수 있다. 매개변수의 개수와 타입이 같아야 한다.
상위 클래스로부터 메소드를 상속받을 때, 서브클래스 내에 같은 이름의 메소드가 있는 경우에?Signature가 다르면 중복(overloading)이 되고 Signature가 같으면 재정의(overriding)가 된다

4. Template : 타입을 인자로 하여 새로운 타입을 생성
5. 캡슐화(encapsulation)
객체는 자신이 수행하는 모든 행동과 속성을 다른 객체와 외부 세계에는 보이지 않는다
객체 자신의 Operation을 수행하고 결과를 내놓지만 그 Operation의 동작 원리는 숨기는 것이다.
높은 모듈성과 정보은닉을 제공
참고로 Late binding이란?
Virtual Method Invocation
 변수의 타입이 아닌 실제 메모리 영역을  차지하고 있는 변수가 참조하는 객체를  찾아 그메소드를 호출하는 것, 물론 변수의 경우 해당 사항 없다.(shadow variable, 가리기)

오라클자바커뮤니티에서 설립한 개발자교육6년차 오엔제이프로그래밍 실무교육센터(오라클SQL,튜닝,힌트,자바프레임워크,안드로이드,아이폰,닷넷 실무개발강의)