Java 16

[Java, final] final 정리

`final`은 `class`, `method`를 포함한 여러 곳에 붙을 수 있다. `final`키워드가 붙으면 더는 값을 변경할 수 없게 된다. `final`이 어떻게 쓰이는지 알아보자`final` + 지역변수- final을 지역 변수에 설정한 경우 최초 한번만 할당할 수 있다. 이후에 변수의 값을 변경하려면 컴파일 오류가 발생한다.- final을 지역 변수 선언시 바로 초기화 한 경우 이미 값이 할당되었기 때문에 값을 할당할 수 없다.- 매개변수에 final이 붙으면 메서드 내부에서 매개변수의 값을 변경할 수 없다. 따라서 메서드 호출 시점에 사용된 값이 끝까지 사용된다.//final 지역 변수1final int data1;data1 = 10; //최초 한번만 할당 가능//data1 = 20; //컴..

Java 2024.10.23

[Java, 메모리 구조] 자바 메모리 구조와 static 정리

자바의 메모리 구조자바의 메모리 구조는 크게 메서드 영역, 스택 영역, 힙 영역 3개로 나눌 수 있다. 1. 메서드 영역- 메서드 영역은 프로그램을 실행하는데 필요한 공통 데이터를 관리한다.- 이 영역은 프로그램의 모든 영역에서 공유한다.- 클래스 정보: 클래스의 실행 코드(바이트 코드), 필드, 메서드와 생성자 코드 등 모든 실행 코드가 존재한다.- static 영역: `static` 변수들을 보관한다.- 런타임 상수 풀: 프로그램을 실행하는데 필요한 공통 리터럴 상수를 보관한다. 예를 들어 프로그램에 `"hello"`라는 리터럴 문자가 있으면 이런 문자를 공통으로 묶어서 관리한다. (문자열을 다루는 문자열 풀은 자바 7부터 힙 영역으로 이동함) 2. 스택 영역- 자바 실행 시, 하나의 실행 스택이 생..

Java 2024.10.21

[Java, 접근제어자] 접근제어자 정리

자바는 접근 제어자(access modifier)를 제공한다. 접근 제어자를 사용하면 해당 클래스 외부에서 특정 필드나 메서드에 접근하는 것을 허용하거나 제한할 수 있다. 김영한 선생님께서 말씀하시길 좋은 프로그램은 무한한 자유도가 주어지는 프로그램이 아니라 적절한 제약을 제공하는 프로그램이라고 하셨다. 접근 제어자를 통해 적절한 제약을 부여함으로써 여러 문제들을 차단하고 프로그램 운영을 효율적으로 할 수 있다. 접근 제어자의 종류자바는 4가지 종류의 접근 제어자를 제공한다. - `private` : 모든 외부 호출을 막는다.- `default (package-private)` : 같은 패키지안에서 호출은 허용한다.- `protected` : 같은 패키지안에서 호출은 허용한다. 패키지가 달라도 상속 관계..

Java 2024.10.20

[Java, 패키지] 패키지 정리

컴퓨터는 보통 파일을 분류하기 위해 폴더, 디렉토리라는 개념을 제공한다. 자바도 이런 개념을 제공하는데, 이것이 바로 패키지이다. 패키지 사용- 패키지를 사용하는 경우 항상 코드 첫줄에 `package pack`과 같이 패키지 이름을 적어주어야 한다.- 사용자와 같은 위치에 있는 클래스에 접근할 때는 패키지 경로를 생략해도 된다.- 반대로 사용자와 다른 위치에 존재하는 클래스에 접근할때는 패키지 전체 경로를 포함해서 클래스를 적어주어야 한다. 또는 import를 한다.- 패키지 덕분에 클래스 이름이 같아도 패키지 이름으로 구분해서 같은 이름의 패키지를 사용할 수 있다. 패키지 규칙필수!- 패키지의 이름과 위치는 폴더(디렉토리) 위치와 같아야 한다. 관례!- 패키지 이름은 모두 소문자를 사용한다. (관례)..

Java 2024.10.19

[Java, 생성자] 생성자 정리

객체를 생성하는 시점에 어떤 작업을 하고 싶다면 생성자(Constructor)를 이용하면 된다.예를 들어 객체를 생성하고 바로 초기값을 할당해야 하는 경우가 많은데, 생성자를 사용하면 객체를 생성하는 시점에 즉시 초기값을 할당할 수 있다. this매개변수에 정의한 변수명과 멤버 변수의 이름이 같다면 둘을 어떻게 구분할까?이 경우 멤버 변수보다 매개변수가 코드 블럭의 더 안쪽에 있기 때문에 매개변수가 우선순위를 가진다.따라서 메서드 안에서 멤버 변수에 접근하려면 `this.`라고 해주면 된다.여기서 `this`는 인스턴스 자신의 참조값을 가리킨다. 생성자의 특징- 생성자의 이름은 클래스 이름과 같아야 한다. 따라서 첫 글자도 대문자로 시작한다.- 생성자는 반환 타입이 없다. 비워두어야 한다.- 나머지는 메..

Java 2024.10.19

[Java, 객체지향] 절차지향 프로그래밍 vs 객체지향 프로그래밍

절차 지향 프로그래밍 vs 객체지향 프로그래밍프로그래밍 방식은 크게 절차 지향 프로그래밍과 객체 지향 프로그래밍으로 나눌 수 있다. 절차 지향 프로그래밍- 절차 지향 프로그래밍은 말 그대로 절차를 지향한다. 실행 순서를 중요하게 생각하는 방식이다.- 프로그램의 흐름을 순차적으로 따르며 처리하는 방식이다. 즉, "어떻게"를 중심으로 프로그래밍 한다.- 데이터와 기능이 분리되어 있다. (유지보수 관점에서 관리 포인트가 2곳으로 늘어남) 객체 지향 프로그래밍- 객체 지향 프로그래밍은 객체를 중요하게 생각하는 방식이다.- 실제 세계의 사물이나 사건을 객체로 보고, 이러한 객체들 간의 상호작용을 중심으로 프로그래밍하는 방식이다. 즉, "무엇을" 중심으로 프로그래밍 한다.- 데이터(멤버 변수)와 기능(메서드)을 온..

Java 2024.10.18

[Java, 클래스] 클래스와 데이터 정리

클래스(Class)클래스는 개체를 생성하기 위한 '틀' 또는 '설계도'이다. 클래스는 객체가 가져야 할 속성(변수)과 기능(메서드)을 정의한다. 예를 들어 학생이라는 클래스는 속성으로 `name`, `age`, `grade`를 가진다. 객체(Object)객체는 클래스에서 정의한 속성과 기능을 가진 실체이다. 객체는 서로 독립적인 상태를 가진다.예를 들어, `Student student1 = new Student();`에서 student1은 객체이다 인스턴스(Instance)인스턴스는 특정 클래스로부터 생성된 객체를 의미한다. 그래서 객체와 인스턴스라는 용어는 자주 혼용된다.인스턴스는 주로 객체가 어떤 클래스에 속해 있는지 강조할 때 사용한다. 예를 들어 `student1`객체는 `Student`클래스의 ..

Java 2024.10.17