2025.02.28 ~ 03.04
메소드, API, 제어문
메소드와 API
메소드(method)
어떤 특정 작업을 수행하기 위한 명령문의 집합
메소드 사용의 목적
- 중복되는 코드를 메소드로만들어 코드의 반복 사용을 피할 수 있다.
- 코드의 가독성이 좋아짐
- 손쉬운 유지보수
메소드 선언
접근제어자 반환타입 메소드이름(매개변수){
실행할 코드
return
}
접근제어자 : 메소드에 접근할 수 있는 범위
- public : 어디서나 접근 가능
- protected : 상속관계이거나 같은 패키지에서 접근 가능
- default(생략가능) : 같은 패키지에서 접근 가능
- private : 같은 클래스 내부에서만 접근 가능
반환 타입(return type) : 메소드가 모든 작업을 마치고 반환하는 데이터의 타입
- void : 리턴값 없음
- 기본 변수 자료형 : int, float, 등등
- 오브젝트형 : String, 이외 사용자 정의타입
메소드 이름 : 메소드를 호출하기 위한 이름
매개변수 목록(parameters) : 메소드 호출 시에 전달되는 인수의 값을 저장할 변수들
실행할 코드 : 메소드의 기능을 수행하는 코드
메소드의 호출 흐름
메소드가 호출되면 호출된 메소드로 이동한 뒤 메소드 종료 시 return으로 메소드를 호출 한 곳(이전 메소드)으로 돌아간다.
메소드 호출 방법
클래스명 사용할이름 = new 클래스명(); //객체 생성
사용할이름.메소드명(); //메소드 호출
미리 정의한 메소드는 참조연산자(.)를 통해 호출할 수 있다.
전달인자(argument)에 매개변수에 맞는 자료형을 넣고 매개변수(parameter)가 받아서 메소드를 실행할 수 있다.
non-static 메소드의 경우
클래스명 사용할이름 = new 클래스명();
사용할이름.메소드명();
static 메소드인 경우
클래스명.메소드명();
다른 클래스에 작성한 static 메소드의 경우 호출할 때 클래스명을 반드시 기술
new 클래스명을 지정하는 것이 아닌 클래스명과 원래 메소드명을 그대로 작성!
패키지(package)
서로 관련 있는 클래스/인터페이스 등을 모아, 하나의 그룹으로 단위를 구성하는 것
패키지 선언
package 패키지명;
- 클래스/인터페이스의 소스파일(.java)의 최상단에 선언
- 소문자로만 작성하는 것이 원칙
- 패키지 명을 지정하지 않으면 자동적으로 이름 없는 패키지에 속하게 됨
- 클래스명은 원래 패키지명을 포함하고 있기 때문에 패키지가 다르면 동일한 이름을 가진 클래스를 만들 수도 있다.
- 서로 다른 패키지에 존재하는 클래스를 사용하는 경우에는 클래스명 앞에 패키지명을 명시해서 풀 클래스 이름으로 사용해야 한다.
임포트(import)
서로 다른 패키지에 존재하는 클래스를 사용하는 경우 패키지명을 포함한 풀 클래스 이름을 사용해야 한다.
-> 패키지명을 생략하고 사용할 수 있도록 한 구문이 import 구문
임포트 선언
package 패키지명;
import 패키지명.*;
import 패키지명.클래스명;
import static 패키지명.클래스명;
- 사용하려는 클래스까지를 작성해야 한다.
- static import의 경우 사용하려는 static method까지 전부 써줘야 한다.
API(Application Programming Interface)
응용프로그램에서 사용할 수 있도록, os나 프로그래밍 언어가 제공하는 기능을 제어할 수 있도록 만든 인터페이스
자주 사용하는 클래스
Math 클래스
- java.lang.Math
- 수학에서 자주 사용하는 상수들과 함수들을 미리 구현해 놓은 클래스
- JDK 안에 포함
Math에서 자주 쓰이는 메서드
- abs() : 절대값
- min(a, b) : 최솟값
- max(a, b) : 최댓값
- Math.PI : 원주율
- Math.random() : 난수 출력
(int) (Math.random * 구하려는 난수의 갯수) + (구하려는 난수의 최소값) : 원하는 범위의 난수를 구하는 공식
- import java.util.Random;
Random random = new Random();
random.nextInt(구하려는 난수의 갯수) + (구하려는 난수의 최소값)
최솟값을 적지 않으면 0부터 시작
스캐너(Scanner)
- java.util.Scanner 클래스
- 읽은 바이트를 문자, 숫자, 실수, boolean, 문자열 등 다양한 타입으로 변환하여 리턴하는 클래스
- 토큰 단위로 데이터를 읽어 온다. (토큰 : 공백문자 - Spacebar/Tab/Enter 로 구분 되는 요소)
- JDK 안에 포함
Scanner에서 자주 쓰이는 메서드
- next() : String으로 읽어온다.(띄어쓰기 이후는 읽지 않음)
- nextLine() : String으로 읽어온다.(띄어쓰기 포함 한 줄을 읽는다. Enter 이전까지)
- nextInt() : int로 읽어온다.
- nextBoolean() : boolean으로 읽어온다.
- nextByte() : byte로 읽어온다.
- nextShort() : short로 읽어온다.
- nextLong() : long을 읽어온다.
- nextFloat() : float로 읽어온다.
- nextDouble() : double로 읽어온다.
- nextLine().charAt(0) : 문자열에서 인덱스에 해당하는 문자를 char형으로 반환하는 기능
원래 이렇게 Scanner 객체를 만들어야 한다.
- java.util.Scanner sc = new java.util.Scanner(java.lang.System.in);
하지만 java.lang은 패키지이름 생략 가능하다.
- java.util.Scanner sc = new java.util.Scanner(System.in);
Scanner sc = new Scanner(System.in);
제어문
조건문
조건식을 통해 특정 코드를 실행할지 말지 제어해주는 구문
특정 조건식의 결과가 참이라면 조건문 내부의 코드를 실행한다.
조건식은 참/거짓으로 나올 수 있는 식이어야한다.
조건문의 종류
- if문
- if-else
- if-else if
- switch문
if문
if(조건식){
수행문;
}else if(조건식2){
수행문;
}else{
수행문;
}
switch문
- 정수, 문자, 문자열 형태의 값만 비교 가능
- 실수, 논리는 비교할 수 없다.
- 정확하게 일치하는 경우만 비교할 수 있다.
- 대소 비교를 할 수 없다.
- case절에는 변수를 사용하지 못한다.(값만 비교 가능)
switch(비교할 변수){
case 비교값1:
비교값1과 일치하는 경우 실행할 구문;
break;
case 비교값2:
비교값2와 일치하는 경우 실행할 구문;
break;
default:
case에 모두 해당하지 않는 경우 실행할 구문;
break;
}
반복문
특정 코드를 반복하여 수행할 수 있도록 제어하는 명령문
반복문 종류
for문
for(초기식;조건식;증감식){
반복할 구문;
}
향상된 for문
for (자료형 변수명 : 배열이나 컬렉션){
반복할 구문;
}
while문
초기식;
while(조건식){
조건을 만족하는 경우 수행할 구문(반복할 구문);
증감식;
}
- 무한 루프, 특정 조건을 만족할 때까지 반복할 때
- 파일 읽기, 쓰기 시 주로 사용
do while문
초기식;
do{
1회차에 무조건 실행->이후 조건식 만족하는 경우만 수행할 구문(반복할 구문);
증감식;
}while(조건식);
분기문
조건문 / 반복문 안에서 실행 흐름을 바꿀 수 있는 구문
분기문 종류
- break : 조건문 / 반복문 등에서 탈출을 하는 분기문
- continue : 반복문 끝으로 이동시키며 다른 반복으로 넘어가게 함