2024/05 45

[인프런] 자바 메모리 구조

자바의 메모리 구조는 크게 메서드 영역, 스택 영역, 힙 영역 3개로 나눌 수 있다.메서드 영역 : 클래스 정보를 보관한다. 붕어빵 틀 !스택 영역 : 실제 프로그램이 실행되는 영역이다. 메서드를 실행할 때마다 하나씩 쌓인다.힙 영역 : 객체가 생성되는 영역이다. new 명령어를 사용하면 이 영역을 사용한다. 붕어빵 틀로부터 생성된 붕어빵이 존재하는 공간이고, 배열도 이 영역에 생성된다. 1. 메서드 영역 : 프로그램을 실행하는데 필요한 공통 데이터를 관리한다. 이 영역은 프로그램의 모든 영역에서 공유한다.클래스 정보 : 클래스의 실행 코드, 필드, 메서드와 생성자 코드 등 모든 실행 코드가 존재static 영역 : static 변수들을 보관런타임 상수 풀 : 프로그램을 실행하는데 필요한 공통 리터럴 상..

Java 2024.05.25

[인프런] 캡슐화

캡슐화는 객체 지향 프로그래밍의 중요한 개념 중 하나로, 데이터와 해당 데이터를 처리하는 메서드를 하나로 묶어서 외부에서의 접근을 제한하는 것을 말한다. 캡슐화를 통해 데이터의 직접적인 변경을 방지하거나 제한할 수 있다.캡슐화는 속성과 기능을 하나로 묶고, 외부에 필요한 기능만 노출하고 나머지는 모두 내부로 숨기는 것이다.캡슐화를 안전하게 완성할 수 있게 해주는 장치가 접근 제어자이다.1. 데이터 숨기기객체에는 속성과 기능이 있다. 캡슐화에서 가장 필수로 숨겨야 하는 것이 속성이다. 객체 내부의 데이터를 외부에서 함부로 접근하게 두면, 클래스 안에서 데이터를 다루는 모든 로직을 무시하고 데이터를 변경할 수 있으므로 캡슐화가 깨지게 된다.객체의 데이터는 객체가 제공하는 기능인 메서드를 통해서 접근해야 한다..

Java 2024.05.22

[인프런] 접근 제어자

접근제어자자바는 public, private 같은 접근 제어자를 제공한다. 접근 제어자를 사용하면 해당 클래스 외부에서 특정 필드나 메서드에 접근하는 것을 허용하거나 제한할 수 있다. package access;public class Speaker { int volume; Speaker(int volume) { this.volume = volume; } void volumeUp() { if(volume >= 100) { System.out.println("음량을 증가할 수 없습니다. 최대 음량입니다."); } else { volume += 10; System.out.println("음량을..

Java 2024.05.22

[인프런] 패키지

개발을 하면서 매우 많은 클래스가 생기고 관련이 있는 기능들을 분류해서 관리하고 싶다.자바에서도 폴더 기능을 제공하는데, 이를 패키지라고 한다.패키지는 이름 그대로 물건을 운송하기 위한 포장 용기나 그 포장 묶음을 뜻한다.패키지 사용패키지를 먼저 만들고 클래스를 만든다. 패키지의 위치에 주의해야 한다.package pack;public class Data { public Data() { System.out.println("패키지 pack Data 생성"); }}상단에 내가 위치하고 있는 패키지 명을 꼭 적어주어야 한다. => 생성자에 public을 사용했다. 다른 패키지에서 이 클래스의 생성자를 호출하려면 public을 사용해야 한다.패키지 안의 또 다른 패키지 안 클래스packa..

Java 2024.05.22

[인프런] 객체 지향 프로그래밍

데이터와 기능을 하나로 묶어서 하나의 클래스에 담아서 사용한다. 프로그램을 작성하는 절차도 중요하지만 음악 플레이어라는 하나의 개념을 객체로 온전하게 만드는 것이 더 중요하다. 그러기 위해서는 프로그램의 수행 순서보다는 음악 플레이어 클래스를 만드는 것 자체에 집중해야한다. 음악 플레이어가 어떤 속성을 가지고 어던 기능을 제공하는지에 초점을 맞추어야 한다. public class MusicPlayer { int volume = 0; boolean isOn = false; void on() { isOn = true; System.out.println("음악 플레이어를 시작합니다."); } void off() { isOn = false; ..

Java 2024.05.21

[인프런] 절차 지향 프로그래밍

프로그래밍 방식은 크게 절차 지향 프로그래밍과 객체 지향 프로그래밍으로 나눌 수 있다.절자지향프로그래밍- 절차 지향 프로그래밍은 이름 그대로 절차를 지향한다. 실행 순서를 중요하게 생각하는 방식이다.- 프로그램의 흐름을 순차적으로 따르며 처리하는 방식이다. 객체지향프로그래밍- 객체를 중요하게 생각하는 방식이다.- 객체들 간의 상호작용을 중심으로 프로그래밍하는 방식이다.=> 절차 지향은 데이터와 해당 데이터에 대한 처리 방식이 분리되어 있다. 반면 객체 지향에서는 데이터와 그 데이터에 대한 행동(메서드)이 하나의 객체 안에 함께 포함되어 있다. 절차지향 프로그래밍으로 코드 구성public class MusicPlayerMain1 { public static void main(String[] args)..

Java 2024.05.21

[인프런] null과 NullPointerException

null참조형 변수에는 항상 객체가 있는 위치를 가리키는 참조값이 들어간다. 그런데 아직 가리키는 대상이 없거나, 가리키는 대상을 나중에 입력하고 싶으면 null이라는 특별한 값을 넣어둘 수 있다.null은 값이 존재하지 않는, 없다는 뜻이다. public class Data { int value;}public class NullMain1 { public static void main(String[] args) { Data data = null; System.out.println("1.data = " + data); data = new Data(); System.out.println("2.data = " + data); data =..

Java 2024.05.20

[인프런] 변수와 초기화

변수의 종류- 멤버 변수 : 클래스에 선언- 지역 변수 : 메서드에 선언, 매개 변수도 지역 변수의 한 종류이다. 지역 변수는 이름 그대로 특정 지역에서만 사용되는 변수라는 뜻이다. 변수의 값 초기화멤버 변수 : 자동 초기화인스턴스의 멤버 변수는 인스턴스를 생성할 때 자동으로 초기화된다.숫자(int)=0, boolean=false, 참조형= null개발자가 초기값을 직접 지정할 수 있다.지역변수 : 수동 초기화지역변수는 항상 직접 초기화 해야 한다.public class InitData { int value1; // 초기화 하지 않음 int value2 = 10; // 10으로 초기화}public class InitMain { public static void main(String[] a..

Java 2024.05.20

[인프런] 기본형과 참조형

변수의 데이터 타입을 가장 크게 보면 기본형과 참조형으로 분류할 수 있다. 사용하는 값을 변수에 직접 넣을 수 있는 기본형과 객체가 저장된 메모리의 위치를 가르키는 참조값을 넣을 수 있는 참조형으로 분류할 수 있다.- 기본형 ( Primitive Type ) : int, long, double처럼 변수에 사용할 값을 직접 넣을 수 있는 데이터 타입을 기본형이라 한다.- 참조형 ( Reference Type ) : Student student, int [] students와 같이 데이터에 접근하기 위한 참조(주소)를 저장하는 데이터 타입을 참조형이라 한다. 참조형은 객체 또는 배열에 사용된다.- 숫자 10, 20과 같이 실제 사용하는 값을 변수에 담을 수 있고, 해당 값을 바로 사용할 수 있다.- 참조형은..

Java 2024.05.20

[인프런] 배열

배열 도입 - 시작클래스와 객체 덕분에 학생 데이터를 구조적으로 이해하기 쉽게 변경할 수 있었다. 하지만 학생을 출력하는 부분에 있어 새로운 학생이 추가될 때마다 출력되는 부분을 함께 추가해야한다는 불편함이 있다.배열을 사용하면 특정 타입을 연속한 데이터 구조로 묶어서 편리하게 관리할 수 있다.Studnet 클래스를 사용한 변수들도 Student 타입이기 때문에 학생도 배열을 사용해서 하나의 데이터 구조로 묶어서 관리할 수 있다. 배열에 참조값 대입- Stundent 변수를 2개 보관할 수 있는 사이즈 2의 배열을 만든다.- Student 타입의 변수는 Student 인스턴스의 참조값을 보관한다. Student 배열의 각 항목도 Student 타입의 변수일 뿐이다. 따라서 Studnet 타입의 참조값을 ..

Java 2024.05.20

[인프런] 클래스의 사용 및 크래스, 객체, 인스턴스의 정리

객체에 값 대입객체가 가지고 있는 멤버 변수에 값을 대입하려면 먼저 객체에 접근해야 한다.객체에 접근하려면 . 키워드를 사용하면 된다. 이 키워드는 변수에 들어있는 참조값을 읽어서 메모리에 존재하는 객체에 접근한다. 객체 값 읽기. 키워드를 통해 참조값을 사용해서 객체에 접근한 다음 원하는 작업을 하면 된다. 클래스 - Class클래스는 객체를 생성하기 위한 틀 또는 설계도이다. 클래스는 객체가 가져야할 속성과 기능을 정의한다. - 틀 : 붕어빵 틀은 붕어빵이 아니다. 붕어빵이 나왔으면 좋겠다고 만드는 틀일 뿐 실제 먹을 수 있는 것이 아니다. 실제 먹을 수 있는 붕어빵을 객체 또는 인스턴스라 한다.- 설계도 : 실제 존재하는 것이 아니라 개념으로만 있는 것이다.객체 - Object객체는 클래스에서 정의..

Java 2024.05.20

메모리 구조 이해하기

컴퓨터의 메모리 구조는 크게 스택(Stack), 힙(Heap), 데이터(Data), 코드(Code) 영역으로 나눌 수 있다. 각 영역은 프로그램이 실행되는 동안 다양한 역할을 수행한다.1. 코드(Code) 영역코드 영역은 실행할 프로그램의 기계어 코드가 저장되는 곳이다.이 영역에는 함수, 루프, 변수 등 프로그램을 구성하는 모든 명령어가 포함된다.2. 데이터(Data) 영역데이터 영역은 전역 변수와 정적 변수(static variable)가 저장되는 곳이다.프로그램의 실행 시간 동안 초기화된 데이터와 초기화되지 않은 데이터(subsection)로 나뉜다.3. 스택(Stack) 영역스택 영역은 함수의 호출과 관련된 임시 데이터, 지역 변수, 매개 변수, 반환 값 등을 저장한다.함수의 호출이 시작될 때 생성..

공부할 것 ! 2024.05.12