본문 바로가기
생각 정리

[패스트캠퍼스] Java & SpringBoot로 시작하는 웹 프로그래밍 : 자바 인강_2주차 학습일지

by jaeyoungb 2022. 6. 22.

# 반복문 - while문

1. True인 경우 동안 수행문을 반복해서 수행

2. False인 경우 수행 멈춤

while문 작동 원리

 

while문 예시

※ While문 무한 반복할 때, while(true) { ... } 이런 식으로 사용

 

# 반복문 - do-while문

조건과 상관없이 한 번은 수행문을 수행하고 나서 조건을 체크

do-while문 작동 원리
while문 예시(왼쪽), dowhile문으로 바꿔 표현한 예시(오른쪽)

 

# 반복문 - for문

for문 작동 원리
while문 예시(왼쪽), for문으로 바꿔 표현한 예시(오른쪽)

 

# for문에서의 생략

1. 초기화식 생략 : for문 전에 값을 먼저 초기화해서 for문 내부에서 값 초기화할 필요가 없는 경우

ex) for (      ; i < 5; i++ )

2. 조건식 생략 : for문의 수행문 내부에 조건이 있는 경우

ex) for ( i = 0;      ; i++ )

3. 증감식 생략 : 증감식의 연산이 복잡하거나, 다른 변수의 연산 결과값에 영향을 받는 경우

ex) for ( i = 0; i < 5;     )

4. 무한 반복

ex) for (        ;       ;        )

 

※ i + 1 과 i++ 의 차이점

i++ 은 i += 1 이므로 i 값이 아예 바뀌어버리는데, i + 1 은 i 값 자체가 1 증가하는 게 아님

( 증가하기 위해서는 대입 연산자를 써주어야함 )

 

# 중첩 반복문

반복문 안에 또 반복문이 있는 형태

중첩 반복문은 변수 초기화 같은 부분을 잘 신경써주어야 함

 

# 중첩 반복문을 이용한 구구단

for-for 구구단(왼쪽), while-while 구구단(오른쪽)

# break문

감싸고 있는 제어문을 빠져나오는 기능

여러 반복문이 중첩되어 있는 경우에는 break문이 포함되어 있는 반복문만 빠져 나옴

 

break문 예시

# continue문

반복문 내부에서 조건문 if문과 함께 사용되고, True인 경우에 이후에 나오는 반복문 블럭 내부의 다른 수행문들을 수행하지 않음

 

continue문 예시

 

# 객체 ( Object )

1. 구체적, 추상적 데이터 단위 ( 회원, 학생, 이름, 주문 )

2. 객체 지향 프로그램의 대상

3. 생성된 인스턴스

 

# 객체 지향 프로그램 구현

1. 객체 정의

2. 객체의 속성을 멤버 변수로 구현

3. 멤버 변수를 이용해 메서드를 구현

4. 메서드를 이용해 객체간의 협력을 구현

멤버 변수

# 객체의 속성은 Class의 멤버 변수( member variable ) 로 선언

studentNumber, studentName 등 모두 멤버 변수라고 함

 

※ 멤버 변수는 자동으로 초기화된다.

1. int  -->  0

2. String  -->  null

3. boolean  -->  false

 

# Class

객체를 프로그래밍 하기 위해 코드로 정의해놓은 상태

 

※ Class 코딩

1. Class는 대문자로 시작

2. Java 파일 하나에 여러 개의 클래스가 있을 수 있지만, public class 는 하나

3. public class는 해당하는 Java 파일의 이름은 동일해야 함

 

※ Camel Notation

1. Class는 대문자로 시작

2. 변수나 메서드는 소문자로 시작, 단어의 시작마다 대문자로

 

# 메서드 ( Method )

1. 객체의 기능을 구현하기 위해 클래스 내부에 구현되는 함수

2. 멤버 변수를 이용하여 클래스의 기능을 구현한 함수 (멤버 변수 : 클래스의 속성 및 특성)

3. 멤버 함수 (Memeber Function)이라고도 함

4. 메서드의 이름은 객체와 어떤 기능을 구현할건지와 관련되게 이름을 짓는 것이 좋음

5. 메서드는 객체의 기능을 구현하게 함

 

※ 함수와 메서드의 차이

클래스 및 객체와 연관되어 있는 것은 메서드, 그것들과 상관없이 독립적으로 존재하는 건 함수

함수 ⊃ 메서드

함수 표기 --> abs(), sum()

메서드 표기 --> a.upper(), a.lower()   // a라는 객체가 존재할 때

 

# 메서드 생성

1. 반환값 O, 매개변수 O

2. 반환값 O, 매개변수 X

3. 반환값 X, 매개변수 O  --> void 사용

여러 가지 형태의 메서드

# 스택

1. 함수가 호출될 때 지역 변수들이 사용하는 메모리

2. 함수의 호출이 시작되면, 호출된 함수의 지역 변수를 위한 스택 메모리 공간이 만들어지고, 수행이 끝나면 스택 메모리가 반환됨

 

# 사용자 클래스의 속성을 멤버 변수를 통해 선언하고 메서드를 정의

UserInfo Class

# 사용자 클래스에서 생성된 객체에 여러 사용자 정보를 대입

UserInfoTest Class

# 인스턴스 ( Instance )

1. 클래스에 의해 생성된 객체

2. 클래스에서 생선된 각각의 객체(인스턴스)는 각각 다른 값을 가지게 됨

3. new 키워드를 사용하여 인스턴스를 생성

 

# 힙 메모리 ( Heap Memory )

1. 생성된 인스턴스는 동적 메모리( 힙 메모리 )에 할당됨

2. Java에서는 Garbage Collector가 사용하지 않는 힙 메모리를 수거

( C나 C++에서는 프로그래머가 스스로 수거해야함 --> free() 나 delete 이용 )

3. 하나의 클래스에서 여러 개의 인스턴스가 생성되고 그 인스턴스는 각각 다른 힙 메모리 주소를 가지게 됨

 

# 참조 변수

메모리에 생성된 인스턴스를 가리키는 변수

( 위 코드에서는 user1, user2 )

 

# 참조 값

생성된 인스턴스의 메모리 주소 값

 

# 생성자 ( Constructor )

1. 객체를 생성할 때 사용됨

2. 기본 생성자 : public Class() {}  -->  기본 생성자는 public 접근 지시자로 생성된다.

3. 클래스와 똑같은 이름을 가진 메서드가 존재하지 않을 경우, 자동으로 생성자가 만들어짐

4. 클래스가 생성될 때, 자동으로 클래스와 똑같은 이름의 생성자가 어떠한 메서드보다 먼저 실행되도록 약속되어 있음

5. 생성자는 클래스에서 구체화된 인스턴스(객체)를 만드는 역할을 함 --> 인스턴스 '생성자'

6. 생성자는 반환값(return 값)이 없음

7. Student student  = new Student(); 에서 맨 뒤의 Student가 생성자임

8. 클래스에 생성자를 생성하면, 기본 생성자는 제공되지 않음

9. 클래스에 생성자를 생성하고, 기본 생성자도 생성해주면 둘 다 사용 가능

 

※ 멤버 변수와 지역 변수는 전혀 다른 타입의 변수

멤버 변수는 자동으로 초기화가 되는 반면, 지역 변수는 초기화를 꼭 시켜줘야함,  int i = 0; 처럼

 

# 오버로딩 ( OverLoading )

같은 이름의 메서드나 생성자가 여러 개 있는 경우

이름이 같으나, 매개변수가 틀려도 오버로딩이라고 함

 

# 참조 자료형

1. 클래스형으로 변수를 선언함

2. 기본 자료형은 사용하는 메모리의 크기가 정해져 있지만, 참조 자료형은 클래스에 따라 다름

3. 참조 자료형을 사용할 때는 해당 변수에 대해 생성해야함

 

Subject 클래스에서 멤버 변수 생성
Subject 클래스의 속성들을 이용해 Student 클래스 속성을 정의

 

# 접근 제어 지시자 ( Access modifier )

클래스의 멤버 변수, 메서드, 생성자를 사용할 수 있는 범위를 나타내주는 키워드

1. private : 같은 클래스 내부에서만 접근 가능 ( 외부 클래스, 상속 관계의 클래스에서는 접근 불가 )

2. 아무것도 없음 (default) : 같은 패키지 내부에서만 접근 가능 ( 상속 관계라도 패키지가 다르면 접근 불가 )

3. protected : 같은 패키지나 상속관계의 클래스에서 접근 가능하고 그 외 외부에서는 접근 불가

4. public : 클래스의 외부 어디에서나 접근 가능

 

## get() / set() 메서드

private으로 선언된 멤버 변수에 대해 접근, 수정할 수 있는 메서드를 public으로 제공

 

## 정보 은닉 ( Information Hiding )

1. 정보 은닉이 필요한 정보는 private을 사용하고, 외부 접근 가능한 최소한의 정보만을 public을 사용함

2. get() / set() 메서드를 이용하여, private 정보를 public으로 일시적으로 변경해주어 더 효율적으로 객체를 활용 가능

 

# 정보 은닉을 활용한 캡슐화 ( Encapsulation )

1. 꼭 필요한 정보와 기능만 외부에 오픈2. 외부에 통합된 정보와 기능만은 제공하여 일관된 기능 구현 가능3. 각각의 메서드나 멤버 변수를 접근함으로써 발생하는 오류를 최소화

 

정보 은닉을 활용한 캡슐화 예시

 

# this

1. 인스턴스 자신의 메모리를 가리킬 때 사용

2. 생성자에서 또 다른 생성자를 호출할 때 사용

( 인스턴스의 생성이 완전하지 않은 상태이므로 this() statement 이전에 다른 statement를 먼저 쓸 수 없음 )

3. 자신의 주소(참조값)을 반환할 때 사용

 

인스턴스 자신의 메모리를 가리킴
생성자에서 또 다른 생성자를 호출함
자신의 주소(참조값)을 반환함
윗 코드들의 테스트 코드

 

# 객체 지향 프로그래밍에서의 협력

 

학생 객체, 버스 객체, 지하철 객체 간의 협력 예시

 

학생 개체
버스 개체
지하철 개체
위 개체들을 협력하는 테스트 코드