애플 스위프트 언어 개발 가이드를 기반으로 초기화 관련된 내용을 정리했습니다. 초기화가 복잡합니다. 크게 복잡하지 않을 수도 있는 내용이지만 언어마다 조금씩 다른 부분을 잘 정리했습니다.
http://cafe.naver.com/architect1 에서 스터디 진행중입니다.
기본적인 뼈대는 http://swift.leantra.kr/ 를 기반으로 합니다.
3. 변수타입 변수이름
변수?
값을 저장할 수 있는 공간
int number; 정수형 변수 number를 선언한다.
int number = 10; 정수형 변수 number에 10을 담는다.
변수는 데이터를 보관하는 장소(memory)
변수는 사용하기 전에 선언되어야 한다. 변수의 선언이란 “이름”과 “타입”을 정해주는 것
변수는 적용 범위를 가짐
메서드 내부에 선언된 변수는 그 메서드 내부에서만 사용가능
메서드 외부에 (클래스 내부) 선언된 변수는 클래스 내에서 사용가능.
4. 1 byte 2 byte 4 byte 8 byte
논리형 boolean
문자형 char
정수형 byte short int long
실수형 float double
참조형 String
기본형, 참조형
5. 변수,상수 그리고 리터럴
class PrimitiveExam {
public static void main(String[] ar) {
int i;
}
} 메인 메로리에 변수를 위한 메모리 공간이 할당된다.
이때 공간에 이름을 i라고 부여!
class PrimitiveExam {
public static void main(String[] ar) {
int i;
i = 5;
int j = 5;
}
}
변수에 최초로 저장하는 일을 초기화 한다라고 말한다.
데이터를 알리는 키워드! 4byte 크기를 가진다.
6. 변수,상수 그리고 리터럴
class PrimitiveExam {
public static void main(String[] ar) {
int i = 1.4;
System.out.println(i);
}
}
출력을 해보자! 1.4가 나오는가?
class PrimitiveExam {
public static void main(String[] ar) {
i = 5;
int i;
System.out.println(i);
}
}
VM은 위에서 아래로 실행함으로 i가 존재하는것을 알수
없다.
7. 변수,상수 그리고 리터럴
class PrimitiveExam {
public static void main(String[] ar) {
int i = 4;
System.out.println(i);
}
}
4라는 숫자가 리터럴(int형 리터럴)이다.
코드상에서 표현되는 모든 숫자, 문자등이 리터럴이다.
키워드는 제외!
class PrimitiveExam {
public static void main(String[] ar) {
final i = 5;
i = 10;
System.out.println(i);
}
}
선언과 동시에 i를 상수로 초기화 하였음으로 데이터를
바꿀수 없다.
8. 변수,상수 그리고 리터럴
class PrimitiveExam {
public static void main(String[] ar) {
int i = 4;
i = 5;
System.out.println(i);
}
}
출력을 해보자! 4 or 5 무엇이 나오는가?
class PrimitiveExam {
public static void main(String[] ar) {
final i = 5;
i = 10;
System.out.println(i);
}
}
선언과 동시에 i를 상수로 초기화 하였음으로 데이터를
바꿀수 없다.
9. Primitive Type
class PrimitiveType {
public static void main(String[] ar) {
char ch = ‘A’;
int code = (int)ch;
int code_num = 65;
char ch_num = (char)code;
String hellow = “안녕하세요”;
System.out.println(ch);
System.out.println(code);
System.out.println(code_num);
System.out.println(ch_num);
System.out.println(“////////////////////////////////////////”);
System.out.println(hellow);
}
}
다양한 변수를
넣어보도록 하자!
10. 변수타입 변수이름
int number = 10; 정수형 변수 number에 10을 담는다.
배열?
같은 타입의 변수를 하나의 묶으로 다루는것
변수타입 변수이름
int number1 = 10; 정수형 변수 number1에 10을 담는다.
int number2 = 10; 정수형 변수 number2에 10을 담는다.
int number3 = 10; 정수형 변수 number3에 10을 담는다.
int number4 = 10; 정수형 변수 number4에 10을 담는다.
int number5 = 10; 정수형 변수 number5에 10을 담는다.
int number6 = 10; 정수형 변수 number6에 10을 담는다. .
.
.
.
.
변수 100가 필요하다면?
11. 변수타입 변수이름
int[] number = new int[100];
배열?
100개의 int 값을 저장할 수 있는 배열을 생성
0x100 0 0 0 0 0
number[0]
number[1]
number[2]
number[98]
number[99]
12. 변수타입 변수이름
int[] number; 배열을 선언한다.
number = new int[100]; 배열을 생성한다.
배열?
0x100 0 0 0 0 0
number[0]
number[1]
number[2]
number[98]
number[99]
1. int number;
0x100
2. number = new int[100];
14. 변수 타입에 따른 기본값
자료형 기본값
boolean false
char ‘u0000’
byte 0
short 0
int 0
long 0L
float 0.0f
double 0.0d or 0.0
참조형 변수 null
초기화를 확인후.
숫자 뒤의 L, f, d가
무엇인지 책에서 찾
아보자!
15. 배열의 초기화(1차원)
int[] number = new int[5];
number[0] = 100;
number[1] = 90;
number[2] = 80;
number[3] = 70;
number[4] = 60;
5개의 int 값을 저장할 수 있는 배열을 생성
0x100 100 90 80 70 60
number[0]
number[1]
number[2]
number[3]
number[4]
16. 배열의 초기화 (1차원)
int[] number = {100, 90, 80, 70, 60};
same!!!
number[0] = 100;
number[1] = 90;
number[2] = 80;
number[3] = 70;
number[4] = 60;
5개의 int 값을 저장할 수 있는 배열을 생성
0x100 100 90 80 70 60
number[0]
number[1]
number[2]
number[3]
number[4]
17. 배열의 초기화 (1차원)
String[] number = new String[5];
number[0] = new String(“kim”);
number[1] = new String(“che”);
number[2] = new String(“do”);
number[3] = new String(“huny”);
number[4] = new String(“2”);
5개의 String 값을 저장할 수 있는 배열을 생성
0x100 0x200 0x300 0x400 0x500 0x600
number[0]
number[1]
number[2]
number[3]
number[4]
kim che do huny 2
18. 배열의 초기화(2차원)
int [][] number = {
{100, 90, 80, 70} ,
{200, 90, 80, 70} ,
{300, 90, 80, 70}
};
12개의 int 값을 저장할 수 있는 배열을 생성
0x100
0x200
0x300
0x400
100 90number[0]
number[1]
number[2]
80 70
200 90 80 70
300 90 80 70
배열의 배열로 구성되어 있음을 알수있다.
19. 배열의 초기화(가변 배열)
int [][] number = new int [3][];
number[0] = new int[4];
number[1] = new int[4];
number[2] = new int[4];
12개의 int 값을 저장할 수 있는 배열을 생성
0x100
0x200
0x300
0x400
100 90number[0]
number[1]
number[2]
80 70
200 90 80 70
300 90 80 70
배열의 배열로 구성되어 있음을 알수있다.
20. 배열의 초기화(가변 배열)
int [][] number = new int [3][];
number[0] = new int[4];
number[1] = new int[2];
number[2] = new int[3];
12개의 int 값을 저장할 수 있는 배열을 생성
0x100
0x200
0x300
0x400
100 90number[0]
number[1]
number[2]
80 70
200 90 80 70
300 90 80 70
배열의 배열로 구성되어 있음을 알수있다.
21. 배열의 초기화(가변 배열)
int [][] number = new int [3][];
number[0] = new int[4];
number[1] = new int[2];
number[2] = new int[3];
12개의 int 값을 저장할 수 있는 배열을 생성
0x100
0x200
0x300
0x400
100 90number[0]
number[1]
number[2]
80 70
200 90
300 90 80
배열의 배열로 구성되어 있음을 알수있다.
22. 조건문(if)
조건식의 연산결과에 따라 프로그램의 실행흐름을 변경하
기 위하여 사용한다.
if (조건식) {
문장();
}
if(조건식)
문장();
if (조건식) {
문장(); //true
} else {
문장(); // false
}
if (조건식)
문장(); //true
else
문장(); // false
class HellowIf {
public static void main(String[] ar) {
int visitCount = 0;
if (visitCount < 1)
System.out.println(“처음 오셨군요. 방문해주셔서 캄사해용 X)”);
}
}
23. 조건문(중첩 if문)
If문 블록 내에 if문을 사용하는것이 가능하다!
if (조건1) {
문장(); //조건1의 연산결과가 true일때 실행!
if (조건2) {
문장(); //조건 1 2 모두 true일때 실행!
} else {
문장(); //조건 1은 true 2는 false일때 실행
}
문장(); //조건이 false 일때 실행!
}
class HellowIf {
public static void main(String[] ar) {
int visitCount = 0;
int dohuny = 1;
if (visitCount < 1) {
System.out.println(“처음 오셨군요.”);
if(doHuny == 1) {
System.out.println(“김도현.”);
}
}
}
}
24. 조건문(중첩 switch문)
조건이 많을경우 switch문을 사용하는것이 간결!
swich (조건1) {
case 값1 :
문장();
break;
case 값2 :
문장();
break;
default :
문장();
}
25. 조건문(중첩 switch문)
class HellowSwitch {
public static void main(String[] ar) {
int score = (int) (Math.random() * 10) + 1;
switch(score * 100) {
case 100 :
System.out.println(“100점입니다.”);
break;
case 50 :
System.out.println(“50점입니다.”);
break;
default :
System.out.println(“잘못 입력하셨습니다.”);
}
}
}
26. 반복문(for 문)
반복적으로 수행되도록 할 때 사용
for (초기화;조건식;증감식) {
명령();
}
초기화 조건식 수행될 문장 증감식
초기화는 한번만 실행되고, 그 이후부터는 조건식을 만족
하는 “조건식 -> 수행될 문장 -> 증감식”을 반복하다가
false가 되면, for문 전체를 빠져나가게 된다.
초기화, 조건식, 증감식 모두 생략가능.
생각되면 true로 간주!
27. 반복문(for 문)
class HellowFor {
public static void main(String[] ar) {
int score = (int) (Math.random() * 10) + 1;
for(int i = 0; i < 10; i++) {
System.out.println(i + “ 번 잘생겼내 잘생겼어~”);
}
System.out.println(“잘생겼다! ” + i + “ 번 ” + score);
}
}
변수 i 유효범위
변수 sum 유효범위
28. 반복문(while 문)
조건식과 수행해야할 블록만으로 구성된 반복문
while (조건식) {
명령();
}
class HellowWhile {
public static void main(String[] ar) {
int sum = 0;
int i = 0;
while((sum += ++i) <= 100) { //i를 계속 1씩 증가 sum에 더한다.
System.out.println(i + “ – “ + sum);
}
}
}
29. 반복문(do while 문)
While과 비슷하나 블록{}을 먼저수행후 조건식 판단.
do{
명령();
} while (조건식);
class HellowWhile {
public static void main(String[] ar) {
System.out.println(“문장을 입력 하세용”);
System.out.println(“입력을 마치려면 y를 입력하세용”);
do {
input = System.in.read();
System.out.print((char)input);
} while(input != -1 && input != ‘y’);
}
}
30. 반복문(break)
현재에서 가장 가까운 반복문 탈출!
class HellowWhile {
public static void main(String[] ar) {
int sum = 0;
int i = 0;
while(true) {
if(sum > 100)
break;
++i;
sum += I;
}
System.out.println(“i = “ + i + “ sum = “ + sum);
}
}
Break문이 수행되면 이 부분
은 실행되지 않고 반복문을
빠져나간다.
31. 반복문(continue)
반복문의 끝으로 이동하여 다음 반복으로 이동!
class HellowWhile {
public static void main(String[] ar) {
for(int i = 0; I < 10; i++) {
if( i % 2 == 0)
continue;
System.out.println(“i = “ + i + “ sum = “ + sum);
}
}
}
조건식이 true가 되어
continue문이 수행되면 반복
문의 끝으로 이동한다.
우선 i 라는 단어를 먼저 보자.
i 는 내가 임의로 만든 변수의 이름이다.
이렇듯 변수의 이름은 프로그래머가 나름대로 만들 수 있다.
위 5번째 줄이 실행됨으로써 메인 메모리에 변수를 위한 메모리 공간이 할당된다.
이때 할당되는 공간에 이름을 i 라고 부여하는것이다.
그렇다면 왜 굳이 변수에 이름을 부여해야할까?
프로그램을 개발한다는것은 데이터를 저장하고 계산한다는것과 같은 말이다.
즉, 모든 프로그램은 데이터의 저장과 계산으로 시작하고 끝나게 되어있다.
그런데, 데이터를 메모리에 저장했다면 저장한 데이터를 언제든지 다시 불러올수 있어야할것 아니겠는가?
만약 메모리 공간에 이름이 부여되지 않았다면, 불러올 방법이 없는것이다.
하지만 이름이 부여되었다면, 그 이름을 통해서 데이터를 불러올 수 있다.
현재 우리는 변수를 할당하는 방법까지만 알고 있다. (일반적으로 변수의 할당이라고 하지않고 변수의 선언이라고 한다 이유는 소스코드상에 int i 를 입력했다고 해서 메인 메모리에 변수가 할당되는게 아니라, 소스코드가 가상머신에 의해서 실행될때 할당되기 때문이다)
그럼 이제 변수에 데이터를 저장하는 방법을 보이겠다.
우선 i 라는 단어를 먼저 보자.
i 는 내가 임의로 만든 변수의 이름이다.
이렇듯 변수의 이름은 프로그래머가 나름대로 만들 수 있다.
위 5번째 줄이 실행됨으로써 메인 메모리에 변수를 위한 메모리 공간이 할당된다.
이때 할당되는 공간에 이름을 i 라고 부여하는것이다.
그렇다면 왜 굳이 변수에 이름을 부여해야할까?
프로그램을 개발한다는것은 데이터를 저장하고 계산한다는것과 같은 말이다.
즉, 모든 프로그램은 데이터의 저장과 계산으로 시작하고 끝나게 되어있다.
그런데, 데이터를 메모리에 저장했다면 저장한 데이터를 언제든지 다시 불러올수 있어야할것 아니겠는가?
만약 메모리 공간에 이름이 부여되지 않았다면, 불러올 방법이 없는것이다.
하지만 이름이 부여되었다면, 그 이름을 통해서 데이터를 불러올 수 있다.
현재 우리는 변수를 할당하는 방법까지만 알고 있다. (일반적으로 변수의 할당이라고 하지않고 변수의 선언이라고 한다 이유는 소스코드상에 int i 를 입력했다고 해서 메인 메모리에 변수가 할당되는게 아니라, 소스코드가 가상머신에 의해서 실행될때 할당되기 때문이다)
그럼 이제 변수에 데이터를 저장하는 방법을 보이겠다.
변수에 데이터를 저장하려는데 메모리에 저장할 데이터가 없다면 무엇을 어떻게 저장할수있겠는가?
우선 i 라는 단어를 먼저 보자.
i 는 내가 임의로 만든 변수의 이름이다.
이렇듯 변수의 이름은 프로그래머가 나름대로 만들 수 있다.
위 5번째 줄이 실행됨으로써 메인 메모리에 변수를 위한 메모리 공간이 할당된다.
이때 할당되는 공간에 이름을 i 라고 부여하는것이다.
그렇다면 왜 굳이 변수에 이름을 부여해야할까?
프로그램을 개발한다는것은 데이터를 저장하고 계산한다는것과 같은 말이다.
즉, 모든 프로그램은 데이터의 저장과 계산으로 시작하고 끝나게 되어있다.
그런데, 데이터를 메모리에 저장했다면 저장한 데이터를 언제든지 다시 불러올수 있어야할것 아니겠는가?
만약 메모리 공간에 이름이 부여되지 않았다면, 불러올 방법이 없는것이다.
하지만 이름이 부여되었다면, 그 이름을 통해서 데이터를 불러올 수 있다.
현재 우리는 변수를 할당하는 방법까지만 알고 있다. (일반적으로 변수의 할당이라고 하지않고 변수의 선언이라고 한다 이유는 소스코드상에 int i 를 입력했다고 해서 메인 메모리에 변수가 할당되는게 아니라, 소스코드가 가상머신에 의해서 실행될때 할당되기 때문이다)
그럼 이제 변수에 데이터를 저장하는 방법을 보이겠다.