메서드

  • 함수를 메서드라고 한다.
  • 메서드도 함수의 한 종류라고생각하면 된다.
// 메서드 예
pubic static int add (int a, int b) {
		System.out.println(a + " + " + b + " 연산 수행");
		int sum = a + b;
		return sum;
}

// 이 부분이 메서드다.
  • 수학의 함수와 유사한데 함수의 값을 입력하면 어떤 연산을 처리한 다음 결과를 반환 한다.
  • 메서드는 선언본문 으로 나눌 수 있다.
  • 메서드에 넘기는 값과 매개변수 의 타입이 맞아야 하고 넘기는 순서도 맞아야 한다.
  • 넘기는 값을 인자 (Argument) , 받는 값을 매개변수 (paramater)
  • 호출 : call("hello", 20); // <- 인자 메서드 : int call(String str, int age); // <- 매개변수
  • 메서드 선언
  • pubic static int add (int a, int b) // <- 이부분을 선언부라고 한다. // 메서드 이름, 반환타입, 매개변수(파라미터) 목록을 포함한다. // add -> 메서드 이름 // int -> 반환타입 // (int a, int b) -> 매개변수 (메서드 안에서만 사용 됨) // public -> 다른 클래스에서도 호출이 가능하다 (접근제어자에서 자세히) // static -> 객체를 생성하지 않고 바로 호출할 수있는 정적 메서드 (뒤에서 자세히)
  • 메서드 본문
    • 메서드가 수행해야 하는 코드 블록
    • 메서드 호출 하는곳 에서는 선언부만 알고 본문은 모른다.
    • 결과를 반환하려면 본문에 return 문을 사용 해야 한다.
    • 반환타입과 return 타입이 동일 해야 한다.
  • { System.out.println(a + " + " + b + " 연산 수행"); int sum = a + b; return sum; } // 메서드가 수행해야하는 코드 블록
  • 메서드 호출
    • 메서드를 호출 하려면 메서드 이름과 매개변수를 전달하면 된다.
  • int sum1 = add(5, 10); // 호출메서드명 (매개변수1, 매개변수2) int sum2 = add(15, 20); // 호출메서드명 (매개변수1, 매개변수2)

메서드 정의

  • 메서드의 매개변수가 없는 경우
    • 선언 : public static void printHeader() 와 같이 매개변수 를 비워두고 정의
    • 호출 : printHeader(); 와 같이 인수를 비워두고 호출하면 된다.
  • 메서드의 반환 타입이 없는 경우
    • 선언 : public static void printHeader() 와 같이 반환 타입을 void 로 정의 하면 된다.
    • 호출 : printHeader(); 와 같이 반환 타입이 없으므로 매서드만 호출 하고 값도 받지 않는다
    • 반환 타입이 없는 경우의 메서드에는 return이 생략 가능하다.

반환 타입

  • 반환타입이 존재하면 반드시 return값이 존재해야한다.
  • return 문을 만나는 순간 메서드를 탈출한다.
  • 반환 타입이 있는 메서드를 호출 했을때 반환값을 사용하지 않아도 된다.

메서드 호출과 값 전달

  • 자바는 항상 변수의 값을 복사해서 대입한다. (중요!!!)

메서드와 형변환

  • 명시적 형변환
  • public class MethodCasting1 { public static void main(String[] args) { double number = 1.5; // printNumber(number); // <- 형변환을 하지 않아 주석을 풀면 오류가 발생한다. printNumber((int) number); // <- 명시적 형변환 사용 } public static void printNumber(int n) { System.out.println("숫자 : " + n); } }
  • 자동 형변환
    • 앞의 변수에서 배운 자동형변환 원칙이 동일하게 적용된다.
    public class MethodCasting2 {
        public static void main(String[] args) {
            int number = 100;
            printNumber(number); // <- 인자를 number로 넘겨도 큰곳으로 
                                 // 자동형변환으로 넘기기 때문에 문제없다.
        }
    
        public static void printNumber(double n) {
            System.out.println("숫자 : " + n);
        }
    }

메서드 오버로딩

  • 자바는 메서드의 이름뿐 아니라 매개변수 정보를 함께 사용하여 메서드를 구분한다. → 따라서 이름은 갖지만 매개변수가 다른 메서드를 정의 할 수있다.
add(int a, int b)
add(int a, int b, int c)
add(double a, double b)
// 이런식으로 이름은 갖지만 매개변수의 타입과 이름, 갯수로 구분이 가능하다.
  • 오버로딩 → 같은 이름의 메서드를 여러개 정의했다
  • 규칙 → 이름이 같고 매개변수의 타입및 순서가 다르면 오버로딩 가능 (단 반환타입은 인정하지 않는다.)
// 오버로딩 실패 케이스
int add(int a, int b)
double add(int a, int b)

메서드 시그니처 *

  • 메서드 시그니처 = 메서드 이름 + 매개변수 타입 (순서)
  • 자바에서 메서드를 구분 할 수 있는 고유한 식별자나 서명을 뜻한다.

메서드 사용의 장점

  • 코드 재사용 : 필요한 기능을 캡슐화 시켜 필요할 때마다 해당 매서드를 호출하여 사용할 수 있다.
  • 코드 가독성 : 이름이 부여된 메서드가 수행하는 작업을 나타내므로, 가독성이 좋아진다.
  • 코드 유지 관리 : 코드를 쪼개서 관리하므로, 업데이트가 필요한경우 해당코드만 수정하여 관리 할 수 있다.

'자바 공부 > [ 完 ] 자바 입문 - 자바 첫걸음' 카테고리의 다른 글

6 - 2. 반복문 (for - each)  (0) 2024.02.26
9. 배열  (0) 2024.02.26
8. Scanner (스캐너)  (0) 2024.02.25
7. 스코프와 형변환  (0) 2024.02.25
6. 반복문  (0) 2024.02.25

향상된 for문 (for - each)

  • 앞서 반복문에서 못다룬 내용 → 이걸 사용하기 위해서는 배열의 개념을 알아야 한다.
  • 각각의 요소를 탐색한다는 의미로 for-each문 이라고도 부른다.
for (변수타입 변수 : 탐색할 배열) {
		System.out.println(변수)
}
  • 일반 for문과 동일하게 작동한다.
  • 일텔리제이에서 자동 생성 명령어는 ( iter 치면 된다.)
  • 증가하는 index를 사용할때에는 for-each문을 사용할 수 없다.

'자바 공부 > [ 完 ] 자바 입문 - 자바 첫걸음' 카테고리의 다른 글

10. 메서드  (0) 2024.02.26
9. 배열  (0) 2024.02.26
8. Scanner (스캐너)  (0) 2024.02.25
7. 스코프와 형변환  (0) 2024.02.25
6. 반복문  (0) 2024.02.25

배열

같은 타입의 데이터의 묶음을 배열 이라고 한다.

배열 변수는 참조 값을 저장하고 → 우리는 참조값을 찾아가 메모리에 있는 실제 배열에 접근하여 사용하는것이라고 한다.

  • 배열 생성
  • int[] students // 1. 배열 변수 선언 students = new int[5]; // 2. 배열 생성
  • 배열 초기화
    • 숫자는 0, boolean은 false, String 은 null로 초기화 된다.

기본형 VS 참조형 (데이터 타입)

→ 자바 변수의 데이터 타입

  • 기본형 → 사용하는 값을 직접 넣을 수 있는 기본형
    • ex ) int, long, double, boolean
    • 변수 선언과 동시에 크기가 정해진다. (정적)
    • 쓰는 값을 그대로 저장 한다.
  • 참조형 → 배열과 같이 메모리의 참조 값을 넣을수 있는 참조형
    • ex ) int[ ] 배열, 클래스, 객체
    • 크기를 동적으로 할당할 수 있다. (동적)
    • 값이 저장되어있는 주소를 저장 한다.

참조타입이 주소를 저장하는 이유는 :

  • 기본형의 경우 크기가 지정 되어 있지만 참조형의 경우 예를들면 배열이 들어온다면 배열의 크기가 일정하지 않고 유동 적이고, 우리가 사용했던 Scanner 같은 경우도 사용자가 입력하는 길이에 따라 크기가 변경 되기때문에 주소를 저장하는 방식으로 불러온다.

2차원 배열

→ 배열 안에 배열이 하나 들어있는 모습을 2차원 배열 이라고 한다.

→ 행과 열이 존재하는 모습

'자바 공부 > [ 完 ] 자바 입문 - 자바 첫걸음' 카테고리의 다른 글

10. 메서드  (0) 2024.02.26
6 - 2. 반복문 (for - each)  (0) 2024.02.26
8. Scanner (스캐너)  (0) 2024.02.25
7. 스코프와 형변환  (0) 2024.02.25
6. 반복문  (0) 2024.02.25

Scanner

→ 자바에서 제공하는 class 로 Scanner class를 사용하면 사용자의 입력을 매우 편리한게 받을 수 있다.

package scanner;

import java.util.Scanner;

public class Scanner1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("문자열을 입력하세요 : ");
        String str = scanner.nextLine(); // 입력을 Stirng으로 가져온다.
        System.out.println("입력한 문자열 : " + str);

        System.out.print("정수를 입력하세요 : ");
        int intValue = scanner.nextInt();
        System.out.println("입력한 정수 : " + intValue);

        System.out.print("실수를 입력하세요 : ");
        double doubleValue = scanner.nextDouble();
        System.out.println("입력한 실수 : " + doubleValue);

    }
}

→이런식으로 사용할 수 있다.

  • scanner. nextLint(); → 엔터를 입력할때까지 작성한 문자를 가져온다.
  • scanner. nextInt(); → 입렬을 int (정수) 형으로 가져온다.
  • scanner. nextDouble(); → 입력을 double (실수) 형으로 가져온다.
    • 주의 할 점은 여기서 받는타입과 입력 타입을 동일하게 맞춰주어야 한다.

'자바 공부 > [ 完 ] 자바 입문 - 자바 첫걸음' 카테고리의 다른 글

6 - 2. 반복문 (for - each)  (0) 2024.02.26
9. 배열  (0) 2024.02.26
7. 스코프와 형변환  (0) 2024.02.25
6. 반복문  (0) 2024.02.25
5. 조건문  (0) 2024.02.23

스코프 - 지역변수와 스코프

→ 스코프의 뜻은 범위를 말한다.

  • 변수 : 선언한 위치에 따라 지역변수(Local Variable), 맴버변수 로 나뉜다. 지금까지 우리는 지역 변수로 배웠다.
    1. 지역변수 → 이름 그대로 특정 지역에서만 사용할 수 있는 변수, 지역을 벗어나면 사용할 수 없다. 여기서 말하는 지역은 변수가 선언된 코드 블럭( { } ) 중괄호 안을 의미 한다.

스코프의 존재 이유

  • 변수를 선언한 시점부터 변수를 계속 사용할 수 있게 하면 좋겠다고 생각하지만 → 비효율적으로 메모리가 사용되고, 코드의 복잡성이 증가하게 된다.(스코프 범위 안의 변수가 사라지지 않는다면 변수를 새로 선언이나 사용할때에 주의를 기울여야하는 불편함이 생긴다.)
  • while 문과 for문을 비교해보면
// -> while문
public static void main(String[] args) {
        int sum = 0;
        int i = 1;
        int endNum = 3;

        while ( i <= endNum ) {
            sum = sum + i;
            System.out.println("i = " + i + " sum = " + sum);
            i++;
        }
}

// -> for문
public static void main(String[] args) {
        int sum = 0;
        int endNum = 3;

        for (int i = 1; i <= endNum; i++) {
            sum = sum + i;
            System.out.println(sum);
        }
}

// for 문과 while문은 같은 작동을 한다.

→ 해당 코드의 for 문과 while 문은 같은 작동을 하지만 while문의 scope 내에서 i 를 선언해 사용할 수 없어 main 에서 i 를 선언해줬다 그럼 생기는 문제가 다음 코드를 작성 해 줄 때에도 i 변수를 생각하면서 코드를 짜야하는 불편함이 생긴다. ⇒해당 코드는 for 문이 구조적으로 더 깔끔하다고 할 수 있다.

스코프 정리

  • 변수는 꼭 필요한 범위로 한정하여 사용하자
  • 좋은 프로그램은 무한한 자유보다 적절한 제약이 있는 프로그램이다.

형변환 → Casting

자동 형변환

  • 작은 범위에서 큰 범위로는 당연히 값을 넣을 수 있다.
    • ex) int → long → double (가능)
  • 큰 범위에서 작은 범위는 문제가 발생할 수 있다.
    • 소수점 버림 (double → long, int)
    • 오버 플로우 (long → int)
  • 작은 → 큰 데이터 타입으로 변환될때에 자동으로 형태를 변환 시켜준다
    • ex ) int → double 할때에 int 타입의 데이터를 double 타입으로 자동으로 변환 시켜서 저장 시킨다.

명시적 형변환

  • 큰 범위에서 작은 범위 대입은 명시적 형변환이 필요하다.→ 손실변환을 시킨다.
  • double doubleValue = 1.5; int intValue = 0; // intValue = doubleValue; // 컴파일 오류 발생 intValue = (int) doubleValue; // 명시적 형변환 System.out.println(intValue);
  • 위의 코드와 같이 변경하고 싶은 타입을 ( int ) 와 같이 괄호안에 사용하여 명시적으로 입력하면 된다.

형변환 특징

  • 형변환 한다고 해서 doubleValue의 자체의 타입이 변경 되거나 그 안의 값이 변경 되는것이 아니다.
  • 읽는 값의 형태만 변경하는 것이다. 해당 타입의 값은 그대로 저장되어 있는 상태다.
  • 변수의 값은 ( = ) 대입 연산자 할때만 변경 된다.
  • 같은 타입끼리의 계산은 같은 타입 → int + int = int
  • 서로 다른 타입 계산은 큰 범위로 자동 형변환이 된다 → int + double = double + double → double

오버플로우가 발생했을때 대처

  • 오버플로우가 발생하면 끝난거다 → 그냥 상위 타입으로 사용해라

'자바 공부 > [ 完 ] 자바 입문 - 자바 첫걸음' 카테고리의 다른 글

9. 배열  (0) 2024.02.26
8. Scanner (스캐너)  (0) 2024.02.25
6. 반복문  (0) 2024.02.25
5. 조건문  (0) 2024.02.23
4. 연산자  (0) 2024.02.20

반복문

  • 코드를 반복해서 실행할 때 사용
  • while, do-while, for 이렇게 있다.

while

  • 조건에 따라 코드를 반복해서 실행
  • 조건식이 참이면 코드블럭을 실행 거짓이면 while문을 벗어난다.

do - while

  • while 문과 비슷하지만 조건에 상관없이 무조건 1번 코드를 실행 시킨다.
do {
	// 코드 
} (조건식)

// 무조건 코드를 1번 실행 시키고 싶을 때 사용 

break, countine

  • break → 반복문을 즉시 종료
  • countinue → 반복문의 나머지 부분을 건너뛰고 다음 반복문으로 넘어간다.
  • while, do-while, for문 안에 모두 사용 된다.

for 문

  • while 문과 같은 반복문
  • 횟수를 정해서 반복시킬때 사용
  • 좀더 구조화 하기 쉽다.
  • 조건식이 없을때 무한 반복한다
for (; ;) {

} 
// 무한 반복 하는 for문 

중첩 반복문

  • 반복문 내에 반복문을 또 사용 하는것

'자바 공부 > [ 完 ] 자바 입문 - 자바 첫걸음' 카테고리의 다른 글

8. Scanner (스캐너)  (0) 2024.02.25
7. 스코프와 형변환  (0) 2024.02.25
5. 조건문  (0) 2024.02.23
4. 연산자  (0) 2024.02.20
3. 변수  (0) 2024.02.19

조건문

지금까지는 위에서 아래로 한 줄씩 코드가 작성되었는데 특정 조건에 따라 다른 코드를 실행 시키고 싶을때 조건문을 사용하여 해결 할 수 있다.

조건문의 종류

  • if - else
  • switch
  • 삼항 연산자

if 문

  • 특정 조건이 true 인지 확인하고 true 일때만 특정 블록을 실행 시킨다.

else 문

  • if 문에서 만족하는 조건이 없을때 실행 하는 코드.

if, else-if 문의 특징

  • 독립적인 수행을 원할 때는 if 문을 각각 주어 사용
if (조건1) {
	수행1
}
if (조건2) {
	수행2
}
// -> 각각 해당 조건을 만족하면 2개 모두 출력 하거나
// -> 하나만 만족하면 1개만 출력 하고 싶을때??

// -> 회원가입 조건 찾을때 사용했던거 같다.
  • 서로 연관되어 하나로 묶을때에
if (조건1) {
	수행1
} else if(조건2) {
	수행2
}
// -> 조건1 과 2중 하나만 수행
  • 수행문이 1줄일때는 중괄호를 생략 가능하지만 권장하진 않는다.

switch 문

  • if 문보다 조금더 편하게 사용 가능하다.
  • if 문은 비교 연산자를 사용 하지만 switch 문은 단순 값이 같은지만 비교할 수 있다.
  • 각 case 마다 break문을 작성 해야 한다.
  • break 문이 없으면 다음 case 조건 까지 작동한다.
  • java 14버전 이후로는 간단하게 작성 가능하다
public class Main {
    public static void main(String[] args) {
        int grade = 2;
        int coupon = switch (grade) {
            case 1 -> 1000;
            case 2 -> 2000;
            case 3 -> 3000;
            default -> 500;
        };
        System.out.println("발급받은 쿠폰 : " + coupon);
    }
}

// -> 발급받은 쿠폰 : 2000

삼항 연산자 (? :)

  • 계산하는 항이 3개
  • if 문과 비교해서 간단하게 작성 가능하다.
((조건) ? (참 일때 결과) : (거짓 일때 결과))

// 이런식으로 항이 3개여서 3항 연산자

'자바 공부 > [ 完 ] 자바 입문 - 자바 첫걸음' 카테고리의 다른 글

7. 스코프와 형변환  (0) 2024.02.25
6. 반복문  (0) 2024.02.25
4. 연산자  (0) 2024.02.20
3. 변수  (0) 2024.02.19
2. 개발 환경 설정 및 자바에 관하여  (0) 2024.02.15

연산자의 종류

  • 산술연산자 : + , - , * , / , %
  • 증감연산자 : ++ , - -
  • 비교연산자 : == , ! = , > , < , > = , < =
  • 논리 연산자 : && , || , !
  • 대입 연산자 : = , += , -= , *= , /= , %=
  • 삼항 연산자 : (조건) ? (조건이 맞으면) : (조건이 틀리면)

연산자 우선순위

  1. 괄호
  2. 단항 연산자
  3. 산술 연산자
  4. shift 연산자
  5. 비교 연산자
  6. 등식 연산자
  7. 비트 연산자
  8. 논리 연산자
  9. 삼항 연산자
  10. 대입 연산자

순으로 우선순위가 정해진다. → 외우지 말고 상식선에서 생각하자.

증감 연산자

  • 전위 증감 → ++a : 먼저 값을 증가시키고 다른일을 수행
  • 후위 증감 → a++ : 다른일을 하고 값을 증가 시킴

논리 연산자

  • && → 둘다 맞아야 true 하나라도 아니면 false
  • || → 둘중 하나만 맞아도 true

축약 연산자

  • 대입연산자와 산술연산을 한번에 하면서 적용 하는법 → ex) i += 3 → i = i + 3 과 같다.

연산자 특징

  • 문자열과 숫자를 더하면 문자열로 반환
  • 연산자 우선순위는 우리가 수학시간에 배운거랑 비슷하다.
  • 비교 연산자를 사용하면 boolean 타입으로 값을 반환 한다.
  • 문자열 비교시에는 == 이 아니라 .equals() 메소드를 사용해 비교해야한다.

 

오늘도 한 챕터 밖에 못들었다.

노트북 구매하느라 정신팔려서...

내일은 좀 힘내자.

'자바 공부 > [ 完 ] 자바 입문 - 자바 첫걸음' 카테고리의 다른 글

6. 반복문  (0) 2024.02.25
5. 조건문  (0) 2024.02.23
3. 변수  (0) 2024.02.19
2. 개발 환경 설정 및 자바에 관하여  (0) 2024.02.15
1. 자바 입문 강의 시작 (기본기 다시 다지기)  (0) 2024.02.15

 

변수 -> 데이터를 담는 그릇

자주 사용 하는 변수 타입

  • 정수 → int, long (파일 다룰때만 byte)
  • 실수 → double
  • 불린 → boolean
  • 문자열 → String (한글자든 여러 글자든)

 

변수 시작

패키지

  • 자바 파일을 구분 하기 위한 폴더
  • 패키지 하위 자바 클래스는 첫 줄에 자신이 해당하는 패키지를 작성 해주어야 한다.
package variable;    // 패키지 위치 작성

public class Var1 { // 클래스 생성 규칙으로는 첫 글자 는 대문자
    public static void main(String[] args) {
        System.out.println(10);
        System.out.println(10);
        System.out.println(10);
    }
}

위와 같이 10을 출력 하는 코드가 있는데 20으로 변경 하려면 하나하나 쳐줘야 한다.

이때에 변수 를 사용하여 쉽게 변경 할 수 있다.

변수

  • 변수는 이름 그래돌 변할 수 있는 뜻
  • 값을 저장하는 저장소 (데이터를 담는 그릇)
  • 변수는 반복에서 읽을 수 있다.
package variable;

public class Var2 {
    public static void main(String[] args) {
        int a; // 변수 선언
        a = 10; // 변수 초기화

        System.out.println(a); // a 에 담긴 값을 출력
    }
}

이렇게 사용하면 a 의 값만 변경 함으로 쉽게 변경이 가능하다.

변수 선언과 초기화

  • 변수 선언하면 컴퓨터의 메모리 공간을 확보에 그곳에 데이터를 저장 한다.
  • 변수의 이름을 통해 해당 메모리 공간에 접근한다.
  • 변수는 꼭 초기화하고 사용해야 한다. → 이전에 무슨 값이 들어있는지 모르기 때문에 오류를 방지하기 위해 자바에서 변수를 초기화 하도록 강제 한다.
package variable;

public class Var5 {
    public static void main(String[] args) {
        int a; // 1. 변수 선언, 초기화 각각 따로
        a = 1;
        System.out.println(a);

        int b = 2; // 2. 변수 선언과 초기화를 한번에
        System.out.println(b);

        int c = 3, d = 4; // 3. 여러 변수 선언과 초기화를 한번에
        System.out.println(c);
        System.out.println(d);
    }
}

컴파일 에러는 좋은 에러, 런타임 에러는 안좋은 에러

변수 타입

  • int → 정수
  • double → 실수
  • boolean → 불리언 (참거짓)
  • char → 문자(문자 하나, 작은 따옴표로 감싼다.)
  • String → 문자열(큰 따옴표로 감싼다.)

각 변수는 자신의 알맞은 타입을 사용해야한다.

우리가 적는 값 들을 리터럴 이라고 한다.

변수타입 변수 = 리터럴
int a = 1;
이런형식

다양한 숫자 타입

  • 정수
    • byte b = 127; // -128 ~ 127
    • short s = 32767; // -32,768 ~ 32,767
    • int i = 2147483647; // -21억 ~ 21억 정도
    • long l = 922337203L; // 엄청 긴 정수 가능 (이 범위 넘는 정도는 거의 없다.)
    // 큰 수 일수록 메모리 공간을 많이 차지한다. → 대부분 int 사용한다.
  • 실수
    • float f = 10.0f;
    • double d = 10.0; // float 보다 큰 범위

숫자 리터럴(값)의 범위

  • 정수
    • int 값 범위만 작성이 가능하다.
    • 21억 초과하는 값을 작성하려면 L(long)타입을 지정해줘야 한다.
  • 실수
    • 기본이 double 타입
    • float 타입 을 사용 하고 싶으면 f(float) 타입을 지정해줘야 한다. → 권장하지 않는다 실무에서는 double 위주로 사용한다.

자주 사용 하는 변수 타입

  • 정수 → int, long (파일 다룰때만 byte)
  • 실수 → double
  • 불린 → boolean
  • 문자열 → String (한글자든 여러 글자든)

 

 

하루정리

오늘은 너무 느긋하게 들은거 같다.

내일 부터는 속도좀 내야겠다.

내일은 연산자, 조건문, 반복문 까지 다 듣고 정리 해보자.

 

집에가서 우분투도 들어야지....

+ Recent posts