2020. 4. 25. 15:29ㆍ인프런/웹개발 코스 [JAVA 개발언어]
개요
이번에는 JAVA에서 사용하는 변수 선언과 배열 조건문 반복문 예외처리까지 배워나갈 것입니다.
변수
변수란 단 하나의 값을 저장할 수 있는 공간이며, 변수는 여러 가지 자료형을 저장할 수 있습니다.
int test1;
변수는 위의 코드 같이 선언하게 되는데, int 라는 변수 타입을 먼저 지정한 후 변수 이름을 적으면 됩니다
그리고 변수의 종류는 여러가지가 있습니다.
위의 사진처럼 클래스 변수 인스턴스변수 지역변수가 있습니다 지금 하고 있는 것을 지역변수이며
클래스변수[static 변수](class variable)
- 같은 클래스의 모든 인스턴스들이 같은 값으로써 공유하는 변수
- 인스턴스 생성없이(클래스가 메모리에 올라갈 때 이미 자동 생성되기 때문입니다)
클래스 이름. 클래스 변수명’으로 접근합니다 - 클래스가 로딩될 때 생성되고 프로그램이 종료될 때 소멸합니다
인스턴스 변수(instance variable)
- 각 인스턴스의 개별적인 저장공간. 인스턴스마다 다른 값 저장 가능합니다.
- 인스턴스 생성 후, ‘참조 변수. 인스턴스 변수명’으로 접근합니다
- 인스턴스를 생성할 때 생성되고, 참조 변수가 없을 때 가비지 컬렉터에 의해자동제거 됩니다
3. 지역변수(local variable)
- 메서드 내에 선언되며, 메서드의 종료와 함께 소멸합니다.
- 조건문, 반복문의 블록{} 내에 선언된 지역변수는 블록을 벗어나면 소멸합니다.
- 반드시 초기화를 해 주어야 합니다.
인스턴스 변수는 인스턴스가 생성될 때마다 생성되므로 인스턴스마다 각기 다른 값을 유지할 수 있지만 클래스 변수는 모든 인스턴스가 하나의 저장공간을 공유하므로 항상 공통된 값을 가지고 있습니다 멤버 변수(클래스 변수와 인스턴스 변수)와 배열의 초기화는 선택적이지만, 지역변수는 반드시 사용하기 전에 초기화를 해 주어야 합니다.
package java01_01;
public class java_var {
public static void main(String[] args) {
int var;
int var2 = 3;
String str;
String str2 = "선언과 동시에 값을 저장이 가능합니다";
}
}
위의 코드처럼 정수형 숫자를 나타내 주는 것을 int 문자열을 나타내는 것을 String이라 하며 변수를 지정하고 그 안에 값을 넣어줄 수 있습니다. 단 변수를 지정할 때 "_"와 "$"를제외한 특수문자는 변수로 지정할 수 없으며 중복과 숫자, 자바에서 사용되는 예약된 키워드도 변수로 지정할 수 없습니다.
package java01_01;
public class java_var {
public static void main(String[] args) {
int var;
int var2 = 3;
String str;
String str2 = "선언과 동시에 값을 저장이 가능합니다";
str2 = "이렇게도 사용이 가능합니다";
str2 = "단 이렇게 사용했을시 마지막에 지정된 변수값으로 나옵니다";
}
}
하지만 위의 코드처럼 같은 변수를 사용하고 변숫값은 다른 값을 넣어도 됩니다
다음으로 변수를 사용해봅시다.
package java01_01;
public class java_var {
public static void main(String[] args) {
int var;
var = 6;
int var2 = 3;
String str1;
str1 = "변수와 문자열을 결합시 +를 사용하여줍니다";
String str2 = "선언과 동시에 값을 저장이 가능합니다";
System.out.println("변수를 사용합니다"+var);
System.out.println("변수를 사용합니다"+var2);
System.out.println("변수를 사용합니다"+str1);
System.out.println("변수를 사용합니다"+str2);
}
}
여기서 문자열과 결괏값을 결합하려면 +를 사이에 넣어주시면 됩니다.
자료형
방금 설명한 int와 string이 자료형이라 합니다
- 정수형: int -2,147,483,648 이상 ~ 2,147,438,647 이하만 저장 가능합니다
은행 관련 업무 또는 돈 관련,
초과 시 랜덤 한오류가 나옵니다
long -9,223,372,036,854,775,808 이상 ~ +9,223,372,036,854,775,807 이하의 큰 값들을 저장 가능.
short -32,768~32,767 작은 값들을 저장합니다
byte -128~127 - 논리형: booleantrue, falsetrue, false라는 참 거짓의 상태를 저장합니다
- 문자형: char 1개의 문자를 저장합니다
- 문자열형:String 여러 문자를 저장합니다
- 실수형:float 소수점이 있는 실수를 저장할 수 있으며 float보다 큰 수를 지정할 때는 double를 사용합니다.
float를 사용할 때는 변숫값 뒤에 f를 넣어줍니다.
예시) float f1 = 30.15f; - 사용자 정의 자료형:
Class mycar {}
형 변환
다음으로 숫자열을 문자열로 문자열을 숫자열로 변환하는 형 변환을 하겠습니다
기본적으로 문자열에 값을 넣고 그 값을 숫자열에 넣으면 오류가 발생합니다. 하지만 형 변환을 사용하면 사용아 가능해집니다.
package java01_01;
public class java_var {
public static void main(String[] args) {
String str = "123456";
int num = 0;
num = Integer.parseInt(str);
System.out.println("변경된 값은"+ num);
float num2 = 12345.6f;
String str2 = "";
str2 = String.valueOf(num2);
System.out.println("변경된 값은"+ str2);
}
}
위의 코드처럼 문자형 string의 값을 정수형 int로 바꾸는 것과 실수형 float에서 string으로 변환시켜줍니다.
여기서 정수형 int로 형 변환시켜주는 코드는 integer.parseInt()이며 문자열 string로 바꿔주는 코드는 String.valueOf()입니다.
추가로 자바에는 promotion(자동 형 변환)과 casting(명시적 형 변환)이 있습니다 이것을 설명하기 전 자료형의 크기를 비교해봅니다
여기서 크기가 크다는 것은자료형을 선언했을 때 부여되는 메모리 공간과는 별개의 문제로 해당 자료형이 표현할 수 있는 숫자의 범위를 기준으로 크기를 구분 짓습니다
byte < short < int < long < float < double < String
<------정수형 변수-----> <--실수형 변수-->
분명히 long 변수는 8바이트, float 변수는 4바이트의 공간을 할당받지만, float 변수가 더 크다고 되어있습니다.
하지만 기본적으로 표현할 수 있는 숫자의 범위가 더 넓은 실수형 변수가 정수형 변수보다 크다고 정의하기 때문입니다.
그러면 프로모션에 대해 알아보겠습니다.
프로모션이란 크기가 더 작은 자료형을 더 큰 자료형에 대입할 때, 자동으로 작은 자료형이 큰 자료형으로 변환되는 현상입니다.
package java01_01;
public class cating_test {
public static void main(String[] args) {
int a = 10;
float b = a;
System.out.println(a);
System.out.println(b);
}
}
위의 코드처럼 작은 자료형을 큰 자료형에 대입할 때 오류가 없이 변환되는 것을 볼 수 있습니다.
다음은 캐스팅입니다
캐스팅은 크기가 더 큰 자료형을 더 작은 자료형에 대입할 때, 자료형을 명시해서 강제로 집어넣을 수 있게 합니다.
만약 위의 사진처럼 b에 a의 값을 넣으려고 하면 크기가 맞지 않아 오류가 나옵니다 이럴 때는
package java01_01;
public class cating_test {
public static void main(String[] args) {
float a = 10;
int b = (int)a;
System.out.println(a);
System.out.println(b);
}
}
위의 코드처럼 명시적으로 형 변환을 시켜주어야 값이 나옵니다.
연산자
연산자는 값을 계산할 때 사용합니다.
연산자는 항의 개수에 따라 단항 연산자, 이항 연산자, 삼항 연산자가 있습니다.
대입 연산자
처음에는 대입 연산자를 알아봅니다 대입 연산자는 =기호를 사용하며 변수의 값을 저장하거나 다음에 값, 변수, 다른 연산 식이 올 수 있습니다
package java01_01;
public class java_var {
public static void main(String[] args) {
int a = 5;
int b = 0;
b = a;
System.out.println("b의 값은"+b);
}
}
이렇게 b의 값에 a를 넣어 값이 5가 나오게 할 수 있습니다
산술 연산자
숫자의 사칙연산 및 나머지 연산에 사용되며 자주 사용합니다.
package java01_01;
public class java_var {
public static void main(String[] args) {
int a = 5;
int b = 2;
int c = 0;
c = a+b;
System.out.println("c의 값="+c);
c = a-b;
System.out.println("c의 값="+c);
c = a*b;
System.out.println("c의 값="+c);
c = a/b;
System.out.println("c의 값="+c);
c = a%b;
System.out.println("c의 값="+c);
}
}
위의 코드처럼 각각의 연산자 +(더하기), -(빼기), *(곱하기), /(나누기), %(나머지) 연산자를 사용하여 계산을 합니다 여기서 나머지 연산자인 % 는 나누고 남을 값을 보여주는 것으로 예를 들어 3/2를 하면 1로 나누고 나머지가 1이 남게 되는데 그 1이 나머지 연산자에서 보여주는 값입니다.
증감 연산자
말 그대로 점점 증가하거나 감소하는 연산자로 ++를 사용하여 증가시키거나 --를 사용하여 감소시킵니다.
package java01_01;
public class java_var {
public static void main(String[] args) {
int a = 5;
a++;
System.out.println("a의 값="+a);
a = 5;
a--;
System.out.println("a의 값="+a);
a = 5;
System.out.println("a의 값="+ ++a);
a = 5;
System.out.println("a의 값="+ a++);
System.out.println("a의 값="+ a);
}
}
여기서 선처리 후 증가 ++a와 후처리 선 증가 a++ 연산자가 있습니다 차이는 먼저 계산하고 입력이 되나 아니면 입력 후 계산이 되냐의 차이입니다.
위의 사진처럼 후처리 선 증가를 사용하면 처음에는 5로 연산되었다 다시 그 값을 가져오면 연산이 된 6을 가져오게 됩니다.
복합 연산자
[+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=,>>>=]의
package java01_01;
public class java_var {
public static void main(String[] args) {
int a = 5;
a+=3;
System.out.println("a의 값="+a);
a-=3;
System.out.println("a의 값="+a);
}
}
이렇게 요약을 하여 보여줄 수 있습니다
비교 연산자
값을 비교하는 연산자로 [==,!=,>, <,>=,<=]를 사용합니다.
package java01_01;
public class java_var {
public static void main(String[] args) {
int a = 5;
int b = 6;
boolean result = false;
result = (a==b);
System.out.println("a와 b의 값은 같은가"+result);
result = (a>b);
System.out.println("a가 b보다 큰가 "+result);
result = (a<b);
System.out.println("a가 b보다 작은가"+result);
}
}
이런 식으로 값이 같은지 아니며 a의 값이 b보다 큰지를 비교할 수 있는 연산자입니다.
조건 연산자
조건식이 참이면 A 거짓이면 B를 결과로 줄 수 있는 연산자로 사용식은[(조건식)? A:B]입니다
package java01_01;
public class java_var {
public static void main(String[] args) {
int a = 5;
a = (a>10)? 0:-1;
System.out.println("a는"+a);
}
}
위의 코드처럼 a에 조건을 걸어주어 a가 10이다 크면 0이나 오고 작으면 -1이 나오도록 하여줍니다.
논리 연산자
논리 연산자는 논리적인 계산을 하는 것으로
- !(NOT논리 부정):! true연산의 true.
- &&(AND논리곱):true&&true일 경우만 true, 그 외true&&false, false&&false, false&&false의 결과는 false (true와 true이면 true)
- ||(OR논리합):false||false일 경우만 false, 그 외true||true, true||false, false||true의 결과는 true (하나라도 true이면 true)
package java01_01;
public class java_var {
public static void main(String[] args) {
boolean a1 = false;
boolean a2 = false;
boolean a3 = false;
a3 = (a1||a2);
System.out.println("a는"+a3);
}
}
이렇게 사용이 되며 주로 if문을 사용하여 다중으로 조건을 걸어 사용합니다.
비트 연산자
비트 연산자는 그림에 효과를 주거나, 전자 또는 전기시스템의 회로 구성이 논리적 AND게이트 등 하드웨어적인 요소가 논리 연산으로 계산을 하기 때문에 시스템프로그램개발등 특수한 환경에 주로사용 합니다.
- &:두 비트 모두 1일 경우에만 1
- | :두 비트 중 하나만 1이여도 1
- ^ :두 비트중 하나만 1이고 다른 하나가 0일 때 0 계산 결과 계산 결과 1, 1^1 또는 또는 0^0은 계산 결과 00
package java01_01;
public class java_var {
public static void main(String[] args) {
int a = 1;//0001
int b = 5;//0101
int c = 7;//0111
int d1 = 0;//0000
int d2 = 0;//0000
int d3 = 0;//0000
d1 = c&b;
System.out.println("d1의 연산"+d1);
d2 = a|b;
System.out.println("d2의 연산"+d2);
d3 = a^b;
System.out.println("d3의 연산"+d3);
}
}
이렇게 각각의 비트를 연산시켜 값을 보여줍니다.
배열
배열이란 동일한 타입의 값이 많을 때 많은 변수를 선언하는 것 대신 많은 변수를 하나의 변수에 저장하고 사용이 가능하게 해 줍니다.
package java01_01;
public class java_var {
public static void main(String[] args) {
String[] food = {"사과","바나나","배","수박"};
int[] myNum = {10,2,30,40,50};
System.out.println("food의 첫번째 값은"+food[0]);
System.out.println("food의 두번째 값은"+food[1]);
System.out.println("food의 세번째 값은"+food[2]);
System.out.println("food의 네번째 값은"+food[3]);
food[0]="밀감";
System.out.println("food의 첫번째 값은"+food[0]);
System.out.println("food의 길이는"+food.length);
}
}
이런 식으로 배열을 지정하여 배열을 가져올 때 첫 번째는 배열은 0이 되며 그 안에는 사과가 들어가 값을 보여줍니다 다음 1 2 3 순으로 보여주며 배열 안에 있는 값을 변환하여 보여줄 수도 있으며 배열의 길이도. length를 사용하여 보여줄 수 있습니다.
이렇게 {} 하나만 사용하는 배열을 1차원 배열이라 하며 {}를 2개를 사용하여 이차원 배열을 지정할 수도 있습니다.
package java01_01;
public class java_var {
public static void main(String[] args) {
//이차원 배열
int[][] myNums = {{1,2,3,4,5},{6,7,8}};
int var = myNums[0][2];
System.out.println("var의 값"+var);
int var2 = myNums[1][2];
System.out.println("var의 값"+var2);
}
}
위의 코드처럼 배열을 2개를 주고 가져올 때 첫 번째[]는 1번째 배열 값들을 가져올 것인가 2번째 값들을 가져올 것인가를 지정하고 두 번째[]는 선택한 배열 안에 있는 값들 중 어느 것을 고를지 고르는 것입니다.
마지막으로 선언만 하고 나중에 사용하고 싶다 할 때는
package java01_01;
public class java_var {
public static void main(String[] args) {
String[] cars;
cars = new String[] {"새로작성","카2번째"};
System.out.println("car에 저장된 값은?"+cars[0]);
System.out.println("car에 저장된 값은?"+cars[1]);
}
}
위의 코드처럼 cars에 new String으로 지정을 해주고 그 값을 적고 출력하면 값이 나오는 것을 볼 수 있습니다.
조건문
조건문이란 연산자를 이용하여 a <b , a <=b, a> b, a>=b, a==b, a!=b와 같은 비교를 통해 참 또는 거짓을 얻을 수 있었습니다 이러한 참 거짓 을 통해 코드를 선택적으로 실행이 가능한 것이 조건문입니다.
조건문의 종류:if문(if, else, else:if문(if, else, else if)과 switch문으로 사용이 가능합니다.
if문
조건문에는 if 문이 있습니다 처음에 if를 사용하고 조건을 주고 거짓 일시 else로 조건을 줍니다 그리고 else에도 뒤에 if를 붙여 다시 한번 조건을 줄 수 있습니다.
package java01_01;
public class java_var {
public static void main(String[] args) {
int a = 5;
int b = 10;
if(a>b) {
a++;
System.out.println("a의값은?"+a);
}else if(false)
{
b++;
System.out.println("b의값은?"+b);
}
else
{
b++;
System.out.println("b2의값은?"+b);
}
}
}
위의 코드를 보면 조건문을 주어 a가 b보다 클 경우 a값에 1을 증가시켜라 하지만 else if를 사용하여 조건을 달아주어 false값을 주고 다음 else로 넘어가 b의 값이 보이게 됩니다.
switch조건문
switch문을 사용할 때는 비교하고자 하는 값이 같은 타입으로 이루어져있어야 합니다 그리고 switch(expression)에서 expression은 각각의 case와 값을 비교하고 만약 일치하면 case에 속한 값을 실행합니다.
package java01_01;
public class java_var {
public static void main(String[] args) {
int week = 3;
switch(week)
{
case 1:
System.out.println("월요일");
break;
case 2:
System.out.println("화요일");
break;
case 3:
System.out.println("수요일");
break;
}
}
}
위의 코드처럼 변수를 지정하고 switch를 주어 변숫값과 같은 case를 찾아 보여주고 break를 사용하여 멈추어줍니다.
반복문
1을 더하고 출력하는 코드를 작성한다고 했을 때 0부터 시작해서 1000까지 진행한다고 하면 이러한 코드를 1000번 적어야 합니다. 반복문은 이러한 반복 해서 어떤 작업을 하고자 할 때 간단하게 표현할 수 있습니다.
반복문 종류에는 do&while,for&each이 있습니다.
while문
이번에는 while문을 사용한 반복문입니다 처음에는 변수 i를 0을 지정해주고 i가 10보다 작을 때 1씩 증가를 반복적으로 하여줍니다.
package java01_01;
public class test2 {
public static void main(String[] args) {
int i = 0;
while(i<10){
System.out.println("i의 값은?"+i);
i++;
}
}
}
do&while문
do&while문은 무조건 한번 실행을 하고 2번째부터 while문처럼 조건을 체크합니다
package java01_01;
public class test2 {
public static void main(String[] args) {
int i = 0;
do{
System.out.println("i의 값은?"+i);
i++;
}while(i<2);
}
}
처음에 i의 값은 그대로 나오기 때문에 0이 나오고 조건에 맞추어 1씩 증가하여 1까지 나온 것을 볼 수 있습니다.
for문
for문은 몇 번 반복할지 정확히 알고 있는 경우에는 while 문대신 for문을 권장합니다
package java01_01;
public class test2 {
public static void main(String[] args) {
for(int i = 0; i<10; i++)
{
System.out.println("i의 값은?"+i);
}
}
}
위의 코드처럼 for문 안에 변수 i를 넣어 0으로 초기화시키고 i가 10 보자 작을 시 1씩 증가하 혀 10보다 같거나 커질 때까지 반복을 해줍니다.
for&each문
for&each문은 배열, List, map에 저장된 모든 값을 사용하여 반복합니다.
package java01_01;
public class test2 {
public static void main(String[] args) {
String[] strs = {"사과","바나나","배"};
int cnt = 0;
for(String str : strs)
{
System.out.println("배열의"+cnt+"번째 요소"+str);
cnt++;
}
}
}
위의 코드처럼 리스트를 만들어주며 for문을 돌려줍니다 여기서 str은 값을 가져오는 배열의 값이고 strs는 그 배열을 가져오는 값을 하나씩 제공하여줍니다. 그리고 cnt로 배열의 값을 가져올 때마다 1씩 증가합니다.
반복문 응용 편
앞 서배운 배열 요소와 결합하여 반복문을 익혀봅니다.
package java01_01;
public class test2 {
public static void main(String[] args) {
String[] strs = {"사과","바나나","배"};
for(int i = 0; i<strs.length-1; i++)
{
System.out.println("배열의"+i+"번째 요소"+strs[i]);
}
}
}
처음에는 방금 사용했던 리스트를 가져오는 반복문으로 이번에는 length에-1을 하여 최댓값을 1을뺴고 값들이 나와줍니다.
그리고 for문은 2번 이상 중첩하여 돌릴 수 있습니다. 하지만 3번 이상부터는 속도가 느려지기 때문에 2번까지만 사용합니다.
package java01_01;
public class test2 {
public static void main(String[] args) {
for(int i = 0; i<3; i++) {
for(int j = 0; j<3; j++) {
System.out.println(i+"와"+j+"의 값");
}
}
}
}
이렇게 2개의 for문을 사용하여 값을 표현합니다
위의 두 개를 응용하여 리스트에서 2개의 배열을 가져와 for문을 사용해봅니다.
package java01_01;
public class test2 {
public static void main(String[] args) {
int[][] numbers = {{1,2,3,4},{5,6}};
for(int i = 0; i<numbers.length; i++) {
for(int j = 0; j<numbers.length; j++) {
System.out.println(i+","+j+"번째 요소:"+numbers[i][j]);
}
}
}
}
이렇게 사용하면 2차원 배열을 사용하더라도 for문을 사용하여 반복문을 돌릴 수 있게 됩니다.
예외 처리
잘못된 값의 입력 또는 추출, 프로그래머의, 코딩 오류, 예측할, 수 없는 오류 등. 자바 코드를. 실행하면 프로그램 오류가 발생할 수 있습니다. 오류가 발생하면 보통 자바는 멈추고(이하 코드 동작 X) X) 오류 메시지를 띄웁니다.
try, catch, finally를 통한 자바 오류를 예측하고, 후속, 처리를 할 수 있습니다.
package java01_01;
import java.util.Scanner;
public class test2 {
public static void main(String[] args) {
try
{
int i = 0;
System.out.println("값을 입력하세요");
Scanner instr = new Scanner(System.in);
i = instr.nextInt();
int[] numbers = {1,2,3,4,5};
System.out.println("배열의 값을 뽑자"+numbers[i]);
}
catch(ArrayIndexOutOfBoundsException e)
{
System.out.println("=======배열오류가 발생했습니다.======");
System.out.println("오류내용"+e.getMessage());
}
catch(Exception e)
{
System.out.println("=======오류가 발생했습니다.======");
System.out.println("오류내용"+e.getMessage());
}
finally
{
System.out.println("이 코드는 무조건 실행이 됩니다.");
}
}
}
위의 코드와 같이 try에서 실행을 하여주고 오류가 발생 시 catch에서 그 오류를 잡아주어 gerMessage로 어떤 오류가 나왔는지 보여줍니다 그리고 finally은 성공이든 오류가 나오든 무조건 나오는 문구입니다.
추가로 catch의 Exception는 예외 처리를 해주는 것이고 ArrayIndexOutOfBoundsException e는 배열에 오류가 나올 시 그 오류를 예외 처리시켜 따로 보여주는 코드입니다.
Try-with-resources
예외 처리 방법에는 try, catch, finally을 사용하는방법도 있지만 구문에서 자원을 해제하려면 명시적으로 해체하여야 합니다.
하지만 자바7 부터 추가된 Try-with-resources가 자원이 되면서 쉽게 해제할 수 있게되었습니다.
여기서 try-with-resources는 try에서 선언된 객체들에 대해서 try가 종료될 때 자동으로 자원을 해제해주는 기능입니다.
참고한 수업 링크
https://www.inflearn.com/course/%EC%9B%B9%EA%B0%9C%EB%B0%9C-%EA%B8%B0%EC%B4%88-java#curriculum
'인프런 > 웹개발 코스 [JAVA 개발언어]' 카테고리의 다른 글
상속 (0) | 2020.04.26 |
---|---|
캡슐화 (0) | 2020.04.26 |
객체지향 프로그래밍 (0) | 2020.04.26 |
함수 (0) | 2020.04.26 |
자바언어 설명, 설치 (0) | 2020.04.25 |