<윤성우의 열혈 Java 프로그래밍> 공부
ch 05. 제어문
switch
- case:와 default: 같은 레이블은 들어가기 전에 보인다는 개념이므로 switch() { } 안에 있어도 들여 쓰기를 하지 않는다.
- break가 없으면 해당 위치에서부터 default까지 아래로 쭉 실행한다.
- 다음과 같이 둘 이상의 레이블을 이어서 둘 수도 있다. 여러 케이스에 해당되는 경우 한번에 처리할 수 있다는 뜻
switch(n) {
case 1:
case 2:
case 3:
System.out.println("case 1, 2, 3에 해당");
break;
default:
break;
}
break & continue
- break문은 가장 가까운 반복문을 탈출한다. continue는 반복문의 맨 위인 조건 검사 부분으로 이동한다. (do
~while에서는 맨 아래의 조건 검사로 이동)
- 무한 루프 구성: while(true) / for( ; ; )
- break로 탈출할 때, 다음과 같이 레이블을 이용해서 빠져나갈 수도 있다.
outer: for(int i=1; i<10; i++) {
for(int j=1; j<10; j++) {
if((i*j)==72) {
System.out.println(i + " x " + j + " = " + i*j);
break outer; //outer로 명시된 반복문까지 빠져나감
}
}
}
ch 06. Method
★함수와 메소드의 차이
- 크게 함수의 범위 안에 메소드가 포함되어 있다. 클래스 밖에서 정의하면 함수, 클래스 내에서 정의하면 메소드인 것이다.
- 함수는 독립적인 반면, 메소드는 클래스 및 객체에 종속적이다. 따라서 함수는 제공된 변수들만 사용이 가능하며, 메소드는 해당 클래스 내에서 제공된 변수들 모두를 사용할 수 있다.
- 메소드는 멤버 함수라고도 한다. 즉, 메소드를 구현하는 것은 객체의 기능을 구현하는 것과 같다. (함수는 그냥 일처리용)
- 자바 프로그램은 main이라는 이름의 메소드에서부터 시작한다.
- 메소드는 클래스 내부에 존재한다.
- 다른 메소드를 호출하는 라인을 메소드 호출문이라 하며, 그때 전달되는 변수를 매개변수라 한다. 매개변수는 해당 메소드 내에서만 유효한 변수이다.
- 메소드의 정의 위치는 프로그램에 영향을 미치지 않는다.
- return문은 호출 영역으로 값을 반환하고 해당 메소드를 종료시킨다.
- 중괄호 내에 선언된 변수들과 같은 지역변수들은 해당 구역을 벗어나면 메모리 공간에서 소멸된다.
다음은 잘못된 재귀 메소드의 예제이다.
class InfRecul {
public static void main(String[] args) {
showHi(3);
}
public static void showHi(int cnt) {
System.out.println("Hi~!");
if(cnt == 1)
return;
showHi(cnt--); //무한 루프 에러!!
}
}
재귀 메소드에서 위처럼 후위 연산을 할 경우, 재귀 호출이 진행되는 동안 연산이 되지 않고 값이 유지되는 문제가 발생한다. 따라서 이런 경우엔 전위 연산 (--cnt) 이나 직접 연산 (cnt -1) 을 해야 한다.
ch 07. Class
Class(비슷한 기능끼리 묶어서 관리) = Data(변수 선언) + Method(data를 이용, 각 기능을 구현한 함수들)
- 클래스에 선언된 변수를 인스턴스 변수(=멤버 변수 =필드), 선언된 메소드를 인스턴스 메소드(=멤버 함수)라 한다.
- 인스턴스 변수는 지역변수와 다르게 인스턴스 메소드들 내에서 접근이 가능하다.
- 클래스를 사용하려면 클래스 자체도 인스턴스화 해야 하는데, 이를 객체를 생성한다고 표현한다. 이는 참조변수를 통해 접근할 수 있다.
new BankAccount(); //인스턴스 (여러 객체 생성 가능)
BankAccount myAcnt; //참조변수 선언
=>
BankAccount myAcnt = new BankAccount();
- 하나의 인스턴스를 둘 이상의 참조 변수가 동시에 참조할 수도 있다.
BankAccount myAcnt2 = myAcnt;
- 참조 변수에 NULL을 대입하면 인스턴스와의 관계를 끊고 아무것도 참조하지 않은 상태로 돌아갈 수 있다.myAcnt = null;
생성자(Constructor)
- 객체의 초기화를 담당하는 메소드로, 이름은 클래스의 이름과 동일해야 한다. 또한, 값을 반환하지 않으므로 반환형도 필요 없다.- 생성자를 직접 정의하지 않으면, 컴파일러가 자동으로 디폴트 생성자를 만들어준다. 이는 인자를 전달받지 않으며, 내부적으로 하는 일도 없다. 하지만 객체에서는 생성자가 반드시 필요하므로 이렇게라도 넣는 것이다. 그러니까 생성자는 정의해 주는 편이 좋다.
이름 규칙
- 클래스: 대문자로 시작, 새 단어 연결시 대문자로 구분
- 변수: 소문자로 시작, 새 단어 연결시 대문자로 구분
- 상수: 전부 대문자, 새 단어 연결시 _로 구분
아직까지는 c++이랑 똑같은 거 같음 나중에 람다나 스트림 때 달라지나?? 빨리 공부해 봐야겠다,,,,
하여튼 오늘치도 끝~~!
'✨언어 > Java' 카테고리의 다른 글
[ch 08, 09] 패키지, 정보 은닉 (0) | 2024.06.28 |
---|---|
[ch 02, 03, 04] 변수, 상수, 연산자 (0) | 2024.06.26 |
[ch 01] Java 시작 (1) | 2024.06.25 |