2016-04-16

1. AWS 와 주요 기능

AWS, Amazon Web Services

 : 아마존에서 제공하는 클라우드 컴퓨팅 서비스 
 : 여러 나라에 리전(Region)이 있음  ... 네트워크의 속도 때문에 



* 리전(Region)

  : AWS의 서비스가 위치한 물리적 장소 
    하나의 리전안에 여러 개의 가용 영역(Availability Zone)이 있다. 
    ex) 서울, 도쿄, 싱가폴...


가용 영역(Availability Zone,AZ)

   : 물리적으로 독립된 데이터 센터
     장애에 대비하기 위해 여러 곳으로 분산




주요 기능

  - Compute
  - Storage
  - Database
  - Application
  - Networking
  - Deployment and Management 
  - Contents Delivery
  - Analytics



Cloud computing?

클라우드 컴퓨팅 (Cloud computing)?
: 실제 작업은 클라우드(데이터 센터)에서 수행, 
   사용자의 컴퓨터는 클라우드에 접속해 상호 작용하는 단말기 역할만 하게 해줌 
: 네트워크를 통해서 내가 원할 때 원하는 것(리소스, 애플리케이션..)을 즉시(on-demand) 제공하는 서비스

특성
 - 원할 때 바로 접근이 가능
 - 유연하게 사용 가능(확장성)
 - 사용한 만큼 비용을 지불


종류 (... 어느 단계까지 서비스 해주는지에 따라)




















- IaaS, Infrastructure as a Services
   : 하부 인프라 부분만 서비스로 제공

  - PaaS, Platform as a Services
      : 서비스를 개발 할 수 있는 환경(platform)을 서비스로 제공, 
    
  - SaaS, Software as a Services
      : 클라우드 환경에서 동작하는 어플리케이션을 서비스로 제공
         ex) google docs, mail....


장점

 - 신속성
 - 확장성과 유연성
    : 서버의 갯수나 스펙 조정에서의...
 - 효율적인 비용
    : 사용한 만큼 돈을 지불
 - 쉬운 관리


이용시 고려 사항

 - 개인정보와 보안 문제 
    : 많은 사람들이 이용하는 가상의 공간이여서 개인 정보가 유출될 수 도 있음
 - custmize 시 범위가 제한되어 있음 
     : 클라우드 컴퓨팅을 서비스하는 회사가 제공해주는 기능을 이용해야 함
       사용자가 원하는 모든 기능, 설정을 조작할 수 없음



2016-04-14

18. java - for-each 문

for-each 문 
 : 배열에 저장되어 있는 모든 값을 참조할 때 사용
 : for문을 사용할 때 보다 더욱 간결하게 사용가능


- 구조
배열의 요소를 지칭하는 변수
반복할 배열
각 요소를 참조하여 무엇을 할 것인지





* 배열 요소를 지칭하는 변수와 반복할 배열의 데이터 타입은 같아야 함!!

* for-each 문 내에서 요소(e)의 값을 변경시켜도 해당 for-each문 내에서만 의미가 있음
   ... 배열 요소를 변경시켜야 한다면  for-each는 사용x 


ex)

int []arr = {1,2,3,4,5};

for(int e : arr){

    System.out.println(e);
}


(실행결과) ... 요소를 모두 출력








* 인스턴스 배열의 경우

  ... 배열에 저장되어 있는 인스턴스의 참조 값이 변경이 불가한것
     참조 값을 통한 인스턴스 변수의 변경은 가능하다.

ex)

public class Number {

    public int num;

    public Number(int n){

        this.num = n;
    }

    public int getNum(){

        return num;
    }
}

class ExMain{

    public static void main(String []args){

        Number []arr = new Number[3];

        arr[0= new Number(1);

        arr[1= new Number(2);

        arr[2= new Number(3);

        
        System.out.println("참조하는 인스턴스의 변수를 1증가후 출력");

        for(Number e : arr)

            e.num++;

        for(Number e : arr)

            System.out.print(e.getNum() + " ");
    

        System.out.println("\n배열의 요소 변경 후 출력");

        for(Number e : arr){

            e = new Number(11);

            e.num++;

            System.out.print(e.getNum() + " ");
        }

        
        System.out.println("\n참조 값의 인스턴스 변수 재 출력");

        for(Number e : arr)

            System.out.print(e.getNum() + " ");
    }
}



(실행결과)










+ 배열 참조 값을 바꾸어도 해당 for-each문 내에서만 바뀐다.

+ 배열 요소가 참조하는 인스턴스 변수는 변경이 된다.  



2016-04-10

17. java - 배열

- 배열로 선언된 변수는 반복문을 통해 동일한 코드 패턴을 적용할 수 있음.
- 다양한 자료형, 클래스를 기반으로 선언 가능
- 배열의 시작은 0번 부터
- 배열도 인스턴스! - 인스턴스 변수와 메소드가 있다!

1) 1차원 배열
- 선언
   타입 []참조변수; 
ex)

int []arr;


- 생성

   new 키워드를 이용하여 저장할 공간을 할당
 ex)
arr = new int[3]; //int 형을 저장할 3개의 공간이 생성












- 접근 방법
 : 참조 변수와 배열의 인덱스를 이용하여 각 요소에 접근할 수 있다.

int []arr = new int[3];
arr[0= 11;
arr[1= 22;
arr[2= 33;




- 선언 + 초기화 방법
int []arr = new int[2] {1,2};

 : 생성과 동시에 크기, 배열 요소를 지정

int []arr = new int[] {1,2};

 : 크기를 지정하지 않아도 지정된 요소대로 자동 할당 됨

int []arr = {1,2};

 : 요소만 지정해주어도 됨



*배열의 길이
  참조변수.length()

*객체 배열

: 배열의 각 요소에는 해당 객체를 참조하는 참조변수가 저장됨.

ex)

String []arr = new String[];
arr[0= "Apple";
arr[1= "Banana";
arr[2= "Grape";

















2) 2차원 배열
 : 둘 이상의 1차원 배열을 묶어서 선언

- 생성 방법

ex)
int [][]arr = new int [2][2]; // 2행 2열 배열 선언












- 접근 방법

ex)
int [][]arr = new int [2][2];
arr[0][0= 1;
arr[0][1= 2;
arr[1][0= 3;
arr[1][1= 4;



- 선언 + 초기화 방법


int [][]arr = new int[][] {{1,2},{3,4}};



int [][]arr = {{1,2},{3,4}};



int [][]arr = {{1},{2,3},{4,5,6}};












이런 형태로 생성됨


* 행의 크기만 명시하는 방식으로도 선언 가능

int [][]arr = new int[3][];
arr[0= new int[2];
arr[1= new int[3];
arr[2= new int[4]; 





2016-04-05

16. java - 콘솔 입력(Scanner)

자바에서 사용자에게 입력을 받기 위해서는 scanner 클래스를 사용한다.


Scanner 클래스

 - 생성자에 전달되는 데이터를 추출하는 기능을 하기닫기 위한 클래스
    ... 키보드 입력 뿐 아니라 다양한 데이터에 이용!
 - java.util.Scanner 를 import 해야 사용가능

* 주요 메소드 
   : 입력받아야 하는 데이터의 타입에 따라 사용
   : 데이터 구분의 기준은 공백이다(스페이스 바, 엔터, 탭)

  - public boolean nextBoolean();

  - public byte nextByte();

  - public short nextShort();

  - public int nextInt();

  - public long nextLong();

  - public float nextFloat();

  - public double nextDouble();

  - public String nextLine();
  
ex)
import java.util.Scanner;
class ExScanner
{
    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        System.out.println("a: " + a);
    
        String b = sc.nextLine();
        System.out.println("b: " + b);    
    }
}


결과

 ... 이상한 결과가 나옴, b는 입력의 기회도 없이 출력되버림 
why? 
 : a를 입력받을 때 데이터 구분을 위해 사용되었던 공백이 nextLine 메소드에 의해 읽혀져서 b에 들어갔기 때문! 

그래서 
import java.util.Scanner;
class ExScanner
{
    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        System.out.println("a: " + a);
    
        sc.nextLine();  //공백을 읽어준다.
        String b = sc.nextLine();
        System.out.println("b: " + b);    
    }
}


b를 입력받기 전 nextLine() 메소드를 사용하여 공백을 제거해준다.

(결과)





올바른 실행 결과가 나옴!!



15. java - 콘솔 출력


* 메소드
1) System.out.print(" ... ");  
    : 문자열 출력 이후 개행 처리 X

2) System.out.println(" ... ");
    : 문자열 출력 이후 개행 처리

3) System.out.printf(" ... ", %d, %s ...);
    : 문자열과 내용을 조합하여 출력, 개행 처리 X 

ex)
class ExOutput
{
    public static void main(String[] args)
    {
        System.out.print("print 메소드 실행");
        System.out.print("\n개행 처리를 따로 해주어야 함\n");
        System.out.println("println 메소드 실행");
        int a = 1;
        double b = 2.2;
        String c = "this is string";
        System.out.printf("a: %d, b: %f, c: %s", a,b,c);
    }
}


(결과)






* Escape Sequence(이스케이프 시퀀스) ... 문자열 안에서 다른 의미로 해석됨
   1) \n : 개행(줄바꿈)
   2) \t  : 탭
   3) \"  : 큰 따옴표
   4) \\ : 역슬래쉬 

ex)
class ExEscapeSe
{
    public static void main(String[] args)
    {
        System.out.println("\n : 개행");
        System.out.println("\t : 탭");
        System.out.println("\" : 큰 따옴표");
        System.out.println("\\ : 역 슬래쉬");
    }
}


(결과)








2016-04-01

문자열에서의 + 연산


 문자열에서 + 연산은 컴파일러의 적절한 메소드 호출을 통해 이루어진다.

ex)
String str = "Hello" + '!';


이런 형태로 연산이 됨
String str = "Hello".concat(String.valueOf('!'));


 -> 1) valueOf 메소드를 이용해 전달된 데이터를 String 인스턴스로 변환 
     2) concat 메소드로 결합
     ...+ 연산이라고 무작정 concat 메소드부터 호출되는 것이 아니다!


+ 연산이 많이 이루어질 경우 String 인스턴스 생성 횟수가 너무 많아지는것 아닌가??? 

 => 문자열 결합 최적화를 통해 해결 ... String 인스턴스를 최대 2개만 생성해도 가능!
       ... StringBuilder 이용

ex)
주어진 문자열 
String str = 11 + "Hello" + 22;


이렇게 변환됨
String str = new StringBuilder().append(11).append("Hello").append(22).toString();


(진행과정)






① StringBuilder 인스턴스가 생성
② append 메소드로 11을 문자형 데이터로 추가
③ Hello 추가
④ 22 추가
⑤ StringBuilder 인스턴스를 String 인스턴스로 만들기 위해 toString메소드 사용
    toString 메소드 내부에서 만들어진 String인스턴스(1개) 를 str 로 참조값 반환하며
    String 인스턴스 str(2개)  생성

 => 이렇게 String 인스턴스를 최대 2개만 생성하고도 가능하다!