프로그래밍 공부/JAVA

JAVA 입문 강의정리 (JAVA란? ~ for each구문)

Wonuk 2021. 7. 18. 21:44
반응형

본 포스팅은 프로그래머스 자바 입문 강의에 기반하여 작성되었습니다.

자바 강의의 모든 내용이 적힌것이 아닌 복습시 놓쳤던 부분을 하나하나 정리한 내용입니다.

 

내용

자바란? , 주석문, 변수, 상수, 기본형타입, 산술연산자, 비교연산자, 연산자 우선순위, if문, 논리연산자, 삼항연산자, switch문, while문, do while문, for문, 배열, 2차원배열, for each

 

자바란?

  • 자바의 탄생

       1995년에 썬 마이크로시스템즈에서 발표한 객체지향 언어이다.
       현재 썬 마이크로시스템즈는 오라클에 인수가 된 상태

 

  • 자바의 특징

      쉬운 언어이다.
      C와 C++언어의 문법을 기본으로 차용하여 개발된 언어
      C와 C++ 이 가진 어려운 문법인 포인터와 다중 상속 제거
      C와 C++에 비해 쉬운 언어이다.
      플랫폼에 독립적이다.
      자바는 JVM() 만 있으면 윈도우, 리눅스, 맥등 어떤 플랫폼에서도 실행이 가능하다.

      객체지향 언어이다. 대표적인 장점 = 재활용성 ,직관성
      객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위,
      즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다.

      메모리 관리를 자동으로 해준다. (가비지 컬렉터)

       가비지 컬렉터 참조 : https://blog.naver.com/hty018/222327736688

 

  • 자바 개발순서

     소스 작성 -> 작성한 소스 컴파일 -> 컴파일한 소스를 JVM을 이용하여 실행

     컴파일러 = 작성한 코드를 실행가능한 파일로 변환하는 프로그램. 이러한 작업을 컴파일 이라고 한다.

  • 주석문

     문서화주석

     // code 행 단위 주석

     /* code
     code
     code */ 블럭단위 주석

     /**
     *code
     */ 

문서화 주석은 클래스, 인터페이스 그리고 멤버 당 하나씩 가질 수 있고, 선언 바로 전에 작성

  • 변수

     변수는 첫번째문자가 소문자, 두단어 이상붙으면 두번째단어 첫글자를 대문자
     ex) int totalCount;
     변수는 저장한 데이터값을 변경 가능하다.

     

  • 상수

     상수는 한번 저장한 데이터값을 변경할수없다.

     상수는 모두 대문자로 만든다 ex)  final int J; 
     상수를 선언할 때는 앞에 final을 붙인다. ex) final double PI = 3.14159;
     상수는 final int OIL_PRICE = 1450; 처럼 두번째 단어 시작전에 언더바(_)를 붙인다.
     final int J = 10;
     fianl int J = 5; // 상수에서는 불가능함

 

  • 기본형 데이터타입 = 정수,실수,문자,논리

 

출처 - 프로그래머스 자바 입문강의

     리터럴 = 특정한 값
     byte < short,char < int < long < float < double 실수가 더 크다.

     기본 데이터 타입의 타입변환 int -> long 작은 데이터타입을 큰곳에 담으면 담김
      ex) int x = 50000; long y = x; 된다. 묵시적 형변환
     long x2 = 5; int y2 = x2; 에러발생. 형변환을 하면 가능
     long x2 = 5; int y2 = (int) x2; 된다. 강제 형변환

     실수형 float과 정수형 long에는 각각 (f,F), (l,L)을 숫자뒤에 붙여 구분해준다.

 

  • 연산자와 연산식

     연산 : 데이터를 처리하여 결과를 산출하는 것 x = y + z;
     연산자 (Operations) : 연산에 사용되는 표시나 기호 (+, -, *, /, %, =, ...)
     피연산자 (Operand) : 연산 대상이 되는 데이터 (리터럴, 변수)
     연산식 (Expressions) : 연산자와 피연산자를 이용하여 연산의 과정을 기술한 것

 

  • 연산자

     부호 연산자 ( + - )
     산술 연산자 ( + - * / % ) -> % 모듈러(Modular) 연산 = 나머지를 구하는 연산
     증감 연산자 ( ++ -- )
     단항 연산자 = 피 연산자가 1개인 연산자 ex)부호, 증감연산자

 

  • 부호연산자

     변수 앞에 +,-가 붙으면 곱셈처럼 적용됨.
     

int i1 = -5;
int i2 = +i1;
int i3 = -i1;
     System.out.println(i2); // 결과값 = -5
     System.out.println(i3); // 결과값 = 5
  • 증감연산자
int i4 = ++i3; // i3 = i3+1;
System.out.println(i4); // 결과값 = 6
System.out.println(i3); // 결과값 = 6

int i5 = i3++; // i3 = i3 + 1;
System.out.println(i5); // 결과값 = 6
System.out.println(i3); // 결과값 = 7

증감 연산의 결과를 봐야함 ++i3, i3++는 다른 방식.
++i3는 1을 먼저 더한 후 i4값에 들어갔지만
i3++는 i3값을 대입한 후 나중에 1을 더한다.

 

  • 산술연산자
int i = 5;
int j = 2;

System.out.println(i + j); // 결과값 = 7
System.out.println(i - j); // 결과값 = 3
System.out.println(i * j); // 결과값 = 10
System.out.println(i / j); // 결과값 = 2 -> 나머지가 아닌 몫만 구한다.
//정수끼리의 연산은 정수값으로만 리턴이 됩니다.
System.out.println(i / (double) j); // 결과값 = 2.5
System.out.println(i % j); // 결과값 = 1 나머지값

정수끼리의 연산은 정수값으로만 리턴이 됩니다.

 

  • 비교연산자

     ==같다 != 다르다 <크다 >작다 <=크거나같다 >=작거나같다
     비교연산자의 결과는 boolean형이다. true or false

 

  • 단순 대입 연산자

     int i = 10;
     오른쪽에 있는 피연산자의 값을 왼쪽 피연산자의 변수에 저장

 

  • 복합 대입 연산자

정해진 연산을 수행한 후에 결과를 대입

int i = 10;
i += 10; // i = i + 10;과 같은의미
System.out.println(i); // 결과값 = 20
System.out.println(i -= 5); // 결과값 = 15
  • 연산자 우선순위

일반적인 연산순위와 비슷함.
논리 연산자의 &&이 ||보다 우선순위가 높음 && > ||

출처 - 프로그래머스 자바 입문 강의

단항 연산자 ++을 잘 구분하여 이해하자.

int a = 5;
System.out.println(++a - 5); // 결과값 = 1
System.out.println(a); // 결과값 = 6

int a = 5;
System.out.println(a++ - 5); // 결과값 = 0
System.out.println(a); 결과값 = 6
  • 조건문

     어떤 문장은 수행하고 싶고, 어떤 문장은 수행하고 싶지 않을때 사용한다.
     JAVA는 제어와 관련된 문법으로 if, switch 문을 제공한다.

 

if - else if - else문

if(조건식){
실행문;
}else if(조건식){
실행문;
}else{
실행문;
}

 

  • 논리연산자

A^B 배타적 논리합

피연산자가 서로 다른 값일 경우만 연산 결과가 true 이다.

boolean b1 = true;
boolean b2 = false;
boolean b3 = true;
System.out.println(b1 ^ b2); // b1은 true, b2는 false로 서로 다르므로 결과는 true 이다.
System.out.println(b1 ^ b3); // b1, b3 모두 true로 서로 같다. 결과는false 이다

A && B = 둘다 true일때 true
A || B = 둘중 하나만 true여도 true
!A = 반대값을 출력 false -> true, true -> false

 

  • 삼항연산자(if문 으로 바꾸기 가능)

     조건식 ? 피연산자1 : 피연산자2
     조건식의 연산결과가 true 이면, 결과는 피연산자 1이고,
     조건식의 연산결과가 false 이면 결과는 피연산자2

int b1 = (5>4) ? 50 : 40; //조건식이 true이므로 b1은 50이 된다.

//삼항연산자가 익숙하지 않다면 if문으로 바꾸기 가능
int b2 = 0;
if(5 > 4){b2 = 50;}
else {b2 = 40;}
  • switch문

     switch문은 어떤 변수의 값에 따라서 문장을 실행할 수 있도록 하는 제어문이다.
     switch문에서 사용하는 키워드는 switch, case, default, break 이다.

int value = 1;
switch(value){
case 1:
System.out.println("1");
break;
case 2:
System.out.println("2");
break;
case 3 :
System.out.println("3");
break;
default :
System.out.println("그 외의 숫자");
}

break가 없으면 value값과 일치하는 case부터 시작해서 나머지 케이스가 다 출력됨.

JDK7이전에는 switch다음 괄호안에 정수타입의 변수만 올 수 있었습니다.
그런데 JDK7부터는 switch다음 괄호안에 문자열 타입의 변수도 올 수 있습니다.

 

  • 반복문

     반복문의 종류는 while문, do-while문, for문 이 있다.

  • while문

     조건문의 실행결과가 true일 동안 반복해서 실행한다.

int i = 0; //while에서 사용할 변수를 선언
while(i < 10){
System.out.println(i);
i++; //조건문을 원하는 만큼만 반복하고 빠져나가기 위한 부분
}

int total = 0; // i의 값을 누적할 변수를 선언합니다. 꼭 total값을 설정해야함.
int i = 1;
while(i <= 100){
total = total + i;
i++; }

while 문의 경우 조건이 맞지않을 경우 코드가 실행되지 않지만
do while 문의 경우 무조건 한번은 실행된다.
import java.util.Scanner;

import java.util.Scanner;
public class DoWhileExam {  

    public static void main(String\[\] args) {
    
   		int value = 0; // 변수를 do안에서 설정하면 지역변수가 되어 while에서 못쓴다.
		Scanner scan = new Scanner(System.in);
	
    	do{
		value = scan.nextInt(); // Scanner클래스를 이용하여 키보드로 부터 숫자값을 입력받습니다.
							// value를 만들어야 while 조건문에 사용가능하기 때문
		System.out.println("입력받은 수 : " + value);
		}while(value != 10); // 입력받은 값이 10이 아닐 경우에는 계속 반복합니다.
	}

 

  • for 반복문

     for(변수 초기화, 조건식, 증감식) {}

int total = 0;
for(int i = 1; i <= 100; i++) {
if(i % 2 != 0) {
continue; // continue를 만나면 아래쪽의 반복문은 실행시키지 않고 바로 다음 반복문실행
}
total = total + i;
}

그만 수행하고 싶으면 break; -> 반복문 탈출

 

  • 배열

     변수가 많아져 하나하나 선언하기 힘들때 배열을 사용.
     배열은 처음 선언할때 만들어진 크기가 바뀌지않음
     변수는 하나인데 값이 여러개 들어간다. 그래서 배열은 기본데이터 타입이 아닌 참조형 타입이다.

 

     int[] array1 = new int[100];
     array[0] = 1;  // 배열을 사용할때는 index를 사용한다 index는 0부터 = 1번째
     배열을 가르키는 변수 자체가 값을 가지고 있는것이 아니라 실제 int값을 가질수 있는 칸의 메모리를 가르킨다.

 

선언과 동시에 초기화하는 방법

int[] array2 = new int[]{1,2,3,4,5};
//int 값을 5개저장 할 수 있는 배열이며, 해당 배열에는 1,2,3,4,5가 순서대로 저장되게 된다.
int[] array3 = {1,2,3,4,5}
// 1차원 배열

int value = array3[0]; 이런식으로 변수에 담을수도 있음.
value와 반복문에 index를 이용해서 값을 차례대로 꺼내거나, 차례대로 넣기도 가능하다.
iarray.length 배열을 참조하는 레퍼런스 변수.length 하면 해당 배열의 길이를 리턴한다.

 

※배열에 1부터 100까지 값넣기

int [] iarray = new int[100];
//배열에 값을 반복적으로 넣어야 하므로, for 반복문을 이용한다.
for(int i = 0; i < iarray.length; i++){
//배열의 인덱스는 0부터 시작하므로, 0부터 배열의 길이보다 하나 작을때까지 반복하면 배열의 크기만큼 반복할 수 있다.
iarray[i] = i + 1;
//배열의 인덱스는 0부터인데 넣고 싶은 값은 1부터 사용해야하므로, 인덱스에 1을 더해준 값을 넣어준다.
}

※배열에 저장된 값을 모두 더해주기

int sum = 0;
//값을 누적하기위한 변수는 반복문 밖에서 선언한다. (for문 밖에서 sum을 사용하기 위해서)
for(int i = 0; i< iarray.length; i++){    
// 배열의 크기만큼 반복한다.           

    sum = sum + iarray\[i\];  
    //반복문 밖에서 선언한 변수에 반복적으로 값을 누적한다.   
}  
System.out.println(sum);  
//배열에 들어있는 모든 값 누적한 변수를 출력한다.

만약 for(int i = 0; i < iarray.length; i++) { int sum = sum + i; } 으로되면 sum이 계속 바뀔뿐
값을 지속적으로 저장할 수 없음.

 

  • 2차원 배열

     배열의 배열이다.

 

2차원 배열 생성 방법
정수를 4개씩 담을 수 있는 배열이 3개 생성된다.
int[][] array4 = new int[3][4]; -> [행][렬]이라고 생각하면 편하다.

 

2차원 배열에 값을 저장하는 방법
array4[0][0] = 10;

 

가변크기의 2차원 배열을 생성하는 방법

int[][] array5 = new int[3][];
//위와 같이 선언하면 array5는 3개짜리 배열을 참조한다. 3개짜리 배열은 아직 참조하는 배열이 없다는 것을 의미.

array5[0] = new int[1]; //정수를 하나 담을 수 있는 배열을 생성해서 array5 의 0 번째 인덱스가 참조한다.
array5[1] = new int[2]; //정수를 두개 담을 수 있는 배열을 생성해서 array5 의 1 번째 인덱스가 참조한다.
array5[2] = new int[3]; //정수를 세개 담을 수 있는 배열을 생성해서 array5 의 2 번째 인덱스가 참조한다.

배열 배열

  0 ->□

  1 ->□□

  2 ->□□□

 

선언과 동시에 초기화하는 방법
int[][] array6 = {{1}, {2,3}, {4,5,6}};
위와 같이 선언할 경우 array6[0][0] 는 1이다. array6[1][0]은 2이다.

 

자바 1.5 버전부터 추가된 foreach 구문
for(타입 값을 받아줄 변수명 : 출력하고 싶은 자료구조)

int[] iarr = {10,20,30,40,50};
//일반 for문
for(int i = 0; i < iarr.length; i++) {
int value = iarr[i];
System.out.println(value);
}
//foreach 구문 -> 나중에 람다식에서 많이 보임.
for(int value:iarr){
System.out.println(value);
}

람다식을 배우기전에 꼭 다시 배울것.

반응형