티스토리 뷰

참고 교재 : 자바 문법 뽀개기(스파르타코딩클럽)

시작하기 전의 당부

 

- 언어 할 때 공부를 할 때가 어려운 건데 그래서 제가 추천드리는 방법은 블랙박스를 그냥 딱 씌우는 거예요.
여기 있는 부분들을 그냥 어떤 마법이 일어난다고 보는 거죠.

- 결국에는 다 하나하나 다 이해가 되시게 될 거거든요.

 

1. main

public class Main {
	public static void main(String[] args) {
    
    	- main메서드가 시작점이다. 이 괄호 안에 내용을 적어두면 위에서부터 아래로 실행이 된다.
        - 나머지는 마법이 일어난다.
        - System.out.println을 처음부터 생각하지 말고,
        - 아 프린트를 쓰면 이게 화면에 나오는구나! 느낌 정도, 나머진 마법
        
    }
}​

 

2. 변수와 상수

- 코드에서는 일단 저장하는 게 핵심이다.
- 지금은 프로그램에서 데이터를 저장하는 방법이 변수밖에 없다고 생각하자.
- 10을 저장해야하는데, 이 저장하는 공간이 변수다.

- 더 쉽게 말하자면, 변수는 사물함과 같다.

public class Main {
 	public static void main(String[] args) {
    
    	10...
    }
}

- 변수를 만드는 것과 쓰는 것을 구분하면 된다.
- 변수를 만드는 데에는 두 가지가 중요한데,
- 먼저 데이터 타입이다. 예를 들면 숫자를 가져오고 싶다면..
- 두 변째는 이름이다.
- 데이터 타입과 이름만 있으면 변수를 만들 수 있다. // 요 부분은 외워야.

public class Main {
 	public static void main(String[] args) {
    
    	int 변수 = 10; // 변수를 만들기
    }
}

데이터 타입은 왜 필요할까?
- 내가 펜을 저장하고 싶은데, 사물함 관리인은 펜의 크기(양)을 모르니까 최대한 큰 공간을 배치한다.
- 그런데 그건 낭비....
- 그럼 알맞은 공간을 달라 => 관리인은 제대로 된 크기의 공간을 할당해주겠지
--> 그것이 바로 '컴파일러' 이다.


쓸 때는 이름만 부르면 된다.
if. 이 변수를 출력하고 싶다.
public class Main {
 	public static void main(String[] args) {
    
    	출력(변수)
    }
}

- 변수는 얼마든지 바뀔 수 있다!
- 상수는 한 번 값이 정해지면 바꿀 수 없고,
- final 키워드를 사용하면 된다.

정리하자면, 선언한다는 게 결국 변수를 만드는 과정이라고 생각하면 된다.

 

3. 기본 자료형(과 참조 자료형)

기본 자료형의 종류 https://codedragon.tistory.com/10623

기본 자료형이라는 게 자바 창작자들이 생각했을 때, 
"이건 내가 아니라도 다른 누구라도 프로그래밍을 하는 사람이면 모두 쓸 만한 자료형이다" 생각한 게 8가지였다.


기본 자료형 외의 것들이 참조 자료형과 같은 것들...
참조자료형은 주로 객체 지향과 나오는 내용.
지금 상황에서는 블랙박스


지금까지 중요한 것은 데이터 타입으로 데이터 타입과 이름을 줘야 만들 수 있고 
사용할 때는 이름만 있으면 된다.
그리고 값이 계속 바뀔 수 있다. 이 정도만 사실 외워주시면 좋을 것 같다.

참조 자료형에 대한 data type은 또 블랙박스

 

4. 배열

여기서 들만한 의문

"만약에 반의 학생이 30명인데, 
30명의 프로그래밍 성적을 가지고 0부터 100점 사이의 프로그래밍 성적을 저장하는 프로그램을 만들어야 된다라고 해보자.

그러면 이 30개를 가지고 뭔가 계속해서 해줘야 한다. 
30개의 점수를 저희는 변수에 어딘가에 저장을 해놓는 게 좋다. 
근데 이 30개를 저장하려고 봤더니 변수를 30번 만들어야 되잖느냐. 
근데 이렇게 여러 개를 저장하고 싶을 때 변수를 그냥 10개가 필요하면 10개를 만드는 거 말고도 다른 대안이 있다!"
배열은 만들고 싶은 타입에 대괄호를 열고 닫으면 이것 자체가 하나의 타입이다.

ex) int[] => 정수 들어가는 배열

public class Main {
	public static void main(String[] args) {
    
    	int num1;
        int num2;
        int num3;
        int num4;
        int num5; ...
        
        int[] nums; // 배열의 변수를 만든 것.
        
        // 그런데 배열은 기본 자료형이 아니므로 new를 통해 실체를 만들어줘야 한다.
        
        int [] nums = new int[배열의 크기]
        ex)int[] nums = new int[30]
        nums 하나만 가지고 있으면, 30개의 개수를 다 쓸 수 있다는 의미
        
        
        *"동일한 자료형의 데이터를 연속된 공간에 저장하기 위한 자료구조"
        ** 연속된 공간  != 같은 공간!!!
        ** 30개의 배열이라고 하면, 하나 하나 저장하는 배열이 30개가 연달아 있는 거지, 같은 공간에 30개가 연달아 있는 것이 아니다.
        (헷갈리지 말 것)
        
        
        ** if) 내가 배열의 임의의 원소를 가지고 오고 싶을 때는 어떻게 했지?
        => index.
        => 한 사람을 특정하고 싶으면 기준점으로부터 몇 번째 칸의 사람인지를 특정해줘야지
    	또 인덱스의 특징 중 하나가 0부터 시작한다는 것.
    
    	ex) nums[1] = 20;
        	System.out.println(nums[1]);
            그럼 이 때 nums[1]을 하나의 변수라고 생각해도 무방.
            System.out.println(nums[1]);을 출력하게 되면 정수값 하나 출력되잖아.
            
            연속되었다는게 핵심. 배열의 시작점만 알고 있으면 그래서 정확한 위칫값을 알 수 있게 되잖아.
            
            "배열은 만드는 시점에 크기가 정해져야 한다!"
            
            배열도 만드는 동시에 초기화가 가능하다.
            변수도 선언과 동시에 초기화해준것처럼.
            ex. int age = 20;
            배열도
            int nums[] = {1, 2, 3, 4}; // 알면 편한 것...
            
            2차원 배열
            int[][] nums = new int[row][col];
            
            *** 주의
            : 배열은 선언과 동시에 크기를 지정받는다. 그래서 크기가 절대 바뀔 수 없는 고정된 크기를 갖는다.
			ex) 한 반에 20명이었는데, 5명이 더 전학와.
            그러면 20개짜리 배열에 5개짜리 배열을 붙이는 게 아니라, 완전히 새로운 25칸짜리 배열을 짜서 거기에 집어넣는 것이다.
            
            
    }

}
배열은 이사도 힘들고 새로 만드는 것도 귀찮은 일이기 때문에, 동적으로 크기를 바꿀 수 있는 
"ArrayList"를 실무에서는 훨씬 더 많이 쓴다!

그런데, 배열의 조금 더 좋은 점을 설명해보면,

public class Main {
	public static void main(String[] args) {
    
    두 가지를 비교해보자
    1)
    int num1;
    int num2;
    int num3;
    int num4;
    int num5;
     
    위에 것을 화면에 모두 출력하려면?
    어쩔 수 없이.
    System.out.println(num1);
    System.out.println(num2);
    System.out.println(num3);
    System.out.println(num4);
    System.out.println(num5);
     
    2)
   	int[] nums = new int[5]; 
    
    cf) System.out.println(nums); // 임의의 이상한 값이 출력되어버린다!
    
    따라서 이러한 귀찮은 방법을 쓸 수밖에 없어.
    System.out.println(nums[0]);
    System.out.println(nums[1]);
    System.out.println(nums[2]);
    System.out.println(nums[3]);
    System.out.println(nums[4]);
    
    그럼 완전히 똑같지 않나? 다른 차별점은 없을까?
    
    
  	일단 위(num1, num2,...)는 변수의 이름이죠. 그래서 얘를 조작할 방법은 절대 없지.
    그런데 아래는 값이 아니라 위치값이잖아!
    nums까지가 변수 이름이고 그 뒤에는(괄호에는) 어떤 값이든, 수식이든 올 수가 있기 때문에 위, 아래가 아주 큰 차이가 있는 거다.
    
    
    그럼 이런 생각을 해보자.
    System.out.println(nums[index]);로 바꾸고, index를 0부터 4까지 변하게 만들어버리면 되는 거 아니야?
    => 반복문 쓰면 된다!
    
    
    int[] nums = new int[5]; 

    System.out.println(nums[0]);
    System.out.println(nums[1]);
    System.out.println(nums[2]);
    System.out.println(nums[3]);
    System.out.println(nums[4]);
	
    
    이것과,
    
    int index = 0;
    for (index = 0; index <5 ; index++) {
    	System.out.println(nums[index]);
        
    는 완전히 동일하다!
    }

	}

}

 

5. 연산자

산술 연산자
- 더하기, 빼기, 곱하기, 나누기
** 여기서 주의할 것 ! 나머지!!! : %

대입 연산자(=)
우변의 것을 좌변의 변수에 대입한다는 의미.

cf. 같다 표시는 등호 두개 ==

헷갈릴만한 것.
ex) num1 += num2; // num1 = num1 + num2;

관계 연산자 : 참은 true, 거짓은 false

논리 연산자 : 역시 true or false
간단하게 쓰면, &&는 and, ||는 or, !는 부정(값 뒤집기)

true or false => true
true and true => false 이 정도만 기억해두자 우선.

 

6. 조건문

- 여기부터 매우매우 중요한 내용이야 잘 기억해두자.

일반적으로 코드에서 시작점은 main인 건 똑같고 프로그램은 위에서 아래로 실행이 돼요. 
이제 하나의 흐름을 볼 수가 있어요. 위에서 아래로 코드가 실행이 되는데 이걸 바꾸고 싶을 때도 있어요. 
"예를 들어서 이렇게 가다가 앞에 뭐를 만나면 여기로 가라"(방향전환 등)
"이렇게 건너 뛰고 가라. 그리고 뭔가를 만나면 다시 위로 가라"
"이렇게 원래의 흐름은 위에서 아래로 가는 건데 그 흐름을 저희가 제어하고 싶을 때가 있다는 거죠"

그 방법 중에 대표적인 두 개가 조건문이랑 반복문이에요. 


조건문은 말 그대로 어떤 조건에 따라서 내가 실행하고 싶은 게 있고 실행하고 싶지 않은 게 있을 수 있는데 그런 걸 설정할 수 있는 방법.
그래서 이것도 외우는 영역인데 조건문은 if가 있고, 
if라는 거 뒤에 조건식을 써주고 이 조건식이 true일 때 아래에 있는 코드가 실행이 된다.

if (조건식) {
	실행되는 코드
}

if는 조건이 필요하지만, else는 나머지일 때 실행하므로, 조건을 따로 써줄필요가 없다.

"switch문은 다음번에... 삼항연산자도 일단..."
"스캐너는 값을 우리가 결정하는 게 아니라, 사용자가 쓸 수 있도록 만드는 것. 이것도 일단 블랙박스..."

 

7. 반복문

반복문 역시 흐름제어할때 사용한다. 특별할 건 따로 없어요.

"일단 do-while문은 넘어가고 for와 while문만 보자..."

for은 세 단계가 필요.

일단 반복을 할 때는 반복변수가 있어야 해요.
반복변수란 반복을 할 때마다 변하는 값을 의미.
반복 횟수를 둬야 적어도 몇 번 할지를 알게 됐잖아.

그냥 편하게 for(1번 ; 2번 ; 3번) 이렇게 영역구분해서 써야겠다.

public class Main {
	public static void main(String[] args) {
    
    	int i;
		for(int i = 0; i<5; i++ ) {
        
        // 1번 값은, 맨 처음에 딱 한 번만 실행된다.
        // 2번 부분은 반복 조건을 써준다. 몇 번, 얼마나 반복할지.
        // 3번 부분은 반복이 끝날 때마다 할 일이 온다.
        
        }
    	System.out.println(i); // 이건 5번 실행되었으므로 5 출력.
        //i는 1->2->3->4->5 요렇게 더하는 게 아니라 값이 변경되는 것.
    	
    }
}

자, 사실 아까 배열이 반복문과 굉장히 잘 어울린다.

public class Main {
	public static void main(String[] args) {
    
    	int[] nums = new int[5]
		for(int i = 0; i<nums.length; i++ ) {
              System.out.println(nums[i]); 
        }
    	System.out.println(i); 
    	
        
        // 변수는 만든 시점이 어디냐에 따라 죽는 시점도 결정이 된다.
        
    }
}
while문

while(조건식) {
	실행 코드 블럭
}

// 조건식이 true인 동안 코드를 계속해서 실행한다는게 차이점!


public class Main {
	public static void main(String[] args) {
    
    	int[] nums = new int[5]
		for(int i = 0; i<nums.length; i++ ) {
              System.out.println(nums[i]); 
        }
    	System.out.println(i); 
    }
}

이것과 똑같은 while문을 만들어보면

public class Main {
	public static void main(String[] args) {

		// 괄호 안에는 true 또는 false만 들어갈 수 있기 때문에, 식 밖에다가 초기화를 미리 시켜주어야한다.
        
        int index = 0;
		while (index < 5) { 
        	System.out.println(index);
            
            index++; // 무한루프에 빠지는 것을 방지하기 위해!!!
        	
        }       
    }
}

 

728x90
반응형
Comments
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
250x250