[앱 스쿨 2기 : Android] 1주차 2023.04.28 (Java)

hxeyexn·2023년 5월 5일
0
post-thumbnail

📅 2023.04.28

📂Java15_ControlStatementEx Ex4 ~ 📂Java20_Scope

Scanner

읽은 바이트를 문자, 정수, 실수, 불리언, 문자열 등 다양한 타입으로 변환하여 리턴

  • 직관적, 사용 편리
  • 1KB 크기의 버퍼 가짐 -> 입력이 바로 전달 -> 속도 면에서 불리
  • 토큰 단위(공백 또는 개행)로 읽음
  • 정규 표현식 적용, 입력값 분할, 파싱 과정 등을 거쳐 속도 느림
import java.util.*;

public class MainClass {

	public static void main(String[] args) {
		// 키보드 입력
		Scanner scanner = new Scanner(System.in);
		// 정수
		int a = scanner.nextInt();
		// 문자열
		String str = scanner.next();
        // String str = scanner.nextLine();
		scan.close();
	}
}

📂Java15_ControlStatementEx


Class

객체를 만들기 위한 설계도

  • 클래스가 붕어빵 틀이라면 객체는 붕어빵🐟🍞!
  • 자바에서는 설계도인 클래스를 가지고, 여러 객체를 생성하여 사용
  • 클래스는 객체의 상태를 나타내는 필드(field)와 객체의 행동을 나타내는 메소드
    (method)로 구성

Object (객체)

  • 객체 ID는 JVM이 부여
  • new 연산자를 활용하여 객체 생성
  • t1 변수 안에 객체가 저장되어 있다는 것은 틀린 말
  • t1이라는 변수에 주소 값이 저장되는 게 아니라 JVM이 부여한 객체 ID가 저장되어 있음
  • 메모리 조각 모음 때문에 객체 위치가 변해서 JVM이 일련번호(객체 ID) 부여
  • 개발자는 변수 이름을 설정할 뿐 객체 이름을 설정하는 것이 아님
public class MainClass {

	public static void main(String[] args) {
    	// 클래스를 통해 객체를 생성
        TestClass1 t1 = new TestClass1();
        // t1에 저장되어 있는 객체의 ID를 t2에 저장
        Testclass1 t2 = t1;
        // 새로운 객체를 생성
        TestClass1 t3 = new TestClass1();
        
    }
}  

// 클래스를 정의
class TestClass1 {

}

📂Java16_OOP_Basic


Method

클래스에서의 작업의 단위

method의 구조

class TestClass {
	//  [접근 제한자] [리턴타입] 메서드 이름([매개변수])
	public void testMethod() {
    	// 소스 코드
    }    
}

접근 제한자

  • 같은 클래스 내부가 아닌 외부에서 접근 하고자 할 때 제한을 두는 부분

리턴 타입

  • 메서드 수행이 완료되어(끝까지 갔거나 return을 만났거나) 메서드를 호출한 쪽으로 되돌아 갈 때 값 하나를 전달할 수 있음
  • 전달할 값이 있다면 전달할 값의 타입을 적어줘야 함
  • 없으면 void라고 작성

중간에 return이 있는 method

  • 메서드 수행을 중간에 중단하고 싶을 때
public void testMethod() {
	for (int i = 0; i < 10; i++) {
		if (i > 5) {				
        	return;
		}
		System.out.println(i);
	}
}
  • 메서드 수행 중단하거나 종료될 때 메서드를 호출한 쪽으로 반환값을 전달하고 싶을 때
public int testMethod() {
	System.out.println("testMethod6 호출");
	return 100;
}

parameter (매개변수)

  • 메서드를 정의할 때 정의해 주는 변수

매개변수를 가지고 있는 method

  • 매개변수가 있는 메서드는 메서드를 호출할 때 반드시 매개변수에 저장될 값을 전달해 줘야 함
  • 매개변수의 개수와 타입이 모두 일치해야 함
// 매개변수를 가지고 있는 메서드
public int testMethod(int a, int b) {
	int c = a + b;
    return c;
}

method의 Overloading

  • 클래스 내부에서 메서드의 이름은 같고 매개변수만 다르게 해서 메서드를 작성하는 것

📂Java17_Method


Member Variable

객체를 통해 호출하는 변수, 객체 변수라고도 함


public class MainClass {

	public static void main(String[] args) {
		TestClass1 t1 = new TestClass1();
		t1.testMethod1();
		
		// 객체 참조 변수를 통한 멤버 변수 접근
		System.out.printf("t1.memberA1 : %d\n", t1.memberA1);
	}

}

class TestClass1 {
	// 멤버 변수
	int memberA1 = 100;
	
	// 같은 클래스에 정의한 메서드에서 변수를 사용한다.
	public void testMethod1() {
	    // 같은 클래스에 정의한 메서드 내에서는 멤버 변수의 접근이 자유롭고
	    // 변수의 이름만 작성하면 된다.
		System.out.printf("memberA1 : %d\n", memberA1);
	}
}

📂Java18_MemberVariable


자바에서의 객체 소멸 시점

객체에 접근하기 위해 사용하는 객체의 ID값을 가지고 있는 변수가 하나도 없다면 소멸의 대상

  • 메모리 청소 작업이 수행되면 소멸의 대상이 되는 객체는 모두 메모리에서 사라짐

메모리 청소 시점

  1. JVM이 메모리가 부족하다고 판단되는 경우
  2. OS가 메모리가 부족하다고 판단하는 경우
  3. 개발자가 코드를 통해 명시적으로 메모리 청소 명령을 날릴 경우

객체를 소멸 대상으로 만드는 방법

  • 객체를 생성할 때 객체의 ID를 변수에 담지 않는다.
  • 객체의 ID를 가지고 있는 변수에 null 값을 넣어준다.

가비지 컬렉션

  • 쓰레기들을 모아 버린다는 의미를 가짐
  • 프로그래밍 언어에서 더 이상 사용하지 않지만 메모리를 차지하고 있는 것들을 모아 제거하는 작업
  • 가비지 컬렉터 : 가비지 컬렉션을 해주는 소프트웨어
  • 가비지 컬렉션은 매우 부담되는 작업이기 때문에 너무 많이 발생하지 않는 것이 중요

📂Java19_ObjectDestroy


Scope

객체의 멤버 변수와 멤버 메서드

  • 객체가 생성되어야지만 사용 가능(메모리에 생성)
  • 객체가 소멸되면 멤버 변수도 소멸되기 때문에 사용 불가능
  • 객체가 소멸되면 객체를 통해 메서드를 호출하지 못하므로 사용 불가능

지역변수

  • 메서드 내부에 정의한 변수
  • 변수가 정의된 블럭(메서드)이 끝나면 변수는 소멸
  • 매개변수는 메서드의 지역변수에 해당
    → 매개변수가 정의된 내부에서만 사용 가능

Variable과 Method

  • 변수는 객체를 생성할 때마다 메모리에 올리고, 메서드는 사전에(객체 생성 전) 메모리에 올림
  • 메서드 내부 코드는 메모리에 한 번만 올라감, 코드가 메서드에 어디 있는지는 객체에 저장
  • 메서드 내부 코드 길이 길어도, 무수히 많아도 상관없음
    → 변수 때문에 메모리 사용량이 느는 거지 메서드 때문에 메모리 사용량이 느는 게 아님

블럭 스코프

  • 변수 등이 선언된 블럭 내부에서 사용 가능

📂Java20_Scope


profile
Android Developer

0개의 댓글