Stack 구조 후입 선출(LIFO, Last In First Out) 여기서 가장 마지막에 넣은 3번이 가장 먼저 나온다. 이렇게 나중에 넣은 것이 가장 먼저 나오는 것을 후입 선출이라 하 고, 이런 자료 구조를 스택이라 한다 Queue 구조 선입 선출(FIFO, First In First Out) 후입 선출과 반대로 가장 먼저 넣은 것이 가장 먼저 나오는 것을 선입 선출이라 한다. 이런 자료 구조를 큐(Queue)라 한다.
자바 메모리 구조 자바의 메모리 구조는 크게 3개로 나눌수 있다. 메서드 영역 : 클래스 정보를 보관한다. 스택 영역 : 실제 프로그램이 실행되는 영역이다. 메서드를 실행할 때 마다 하나씩 쌓인다. 힙 영역 : 객체가 생성되는 영역이다. new 명령어를 사용하면 이 영역을 사용한다. 쉽게 이야기 하면 매서드 영역에서부터 생성된 객체가 존재하는 공간이다. ( 배열도 힙 영역에서 생성된다. ) 메서드 영역(Method Area): 메서드 영역은 프로그램을 실행하는데 필요한 공통 데이터를 관리한다. 이 영역은 프로그램의 모든 영역에서 공유한다. 클래스 정보: 클래스의 실행 코드(바이트 코드), 필드, 메서드와 생성자 코드등 모든 실행 코드가 존재한다. static 영역: static 변수들을 보관한다. 뒤에서..
절차 지향 프로그래밍 절차 지향 프로그래밍은 절차를 지향한다. 쉽게 말해 실행 순서를 중요하게 생각하는 방식이다. 프로그램의 흐름을 순차적으로 따르며 처리하는 방식이다. 즉, "어떻게" 를 중심으로 프로그래밍 한다. 객체 지향 프로그래밍 객체지향 프로그래밍은 객체를 지향한다. 쉽게 말해 객체를 중요하게 생각하는 방식이다. 실제 세계의 사물이나 사건을 객체로 보고, 이러한 객체들간의 상호작용을 중심으로 "무엇을" 프로그래밍 한다. 두개의 중요한 차이 절차지향은 데이터와 해당 데이터에 대한 처리 방식이 분리되어있다. 객체지향은 데이터와 그 데이터에 대한 행동이 하나의 객체 안에 포함되어 있다. 즉, 객체지향에서의 기능들을 매서드로 만들고 원할때의 객체의 매서드를 호출하여 사용하고, 절차지향은 순서를 짜놓고 ..
public static void main(String[] args) { int a = 10; System.out.println("메서드 호출 전: a = " + a); changePrimitive(a); System.out.println("메서드 호출 후: a = " + a); } static void changePrimitive(int x) { x = 20; } 자바는 항상 변수의 값을 복사해서 대입한다. - 기본형, 참조형 모두 항상 변수에 있는 값을 복사해서 대입한다. 기본형이면 변수에 들어 있는 실제 사용하는 값을 복사해서 대입하고, 참조형은 변수에 있는 참조값을 복사해서 대입한다. 기본형 매서드 호출 public static void main(String[] args) { int a = 10;..
기본형 기본형 : int, long, double, boolean 처럼 변수에 사용할 값을 직접 넣을 수 있는 데이터 타입을 기본형이라고 한다. 기본형 변수에는 직접 사용할 수 있는 값이 들어가 있다. - 실제 사용하는 값을 변수에 담고 바로 사용할 수 있다. - 기본형에 들어가 있는 값들은 계산에 사용할 수 있다. 참조형 참조형 : Student student1, int[] students 의 같이 데이터에 접근하기 위한 참조를 저장하는 데이터 타입을 참조형이라고 한다. (Integer, Double 이런것들은 기본형을 감싸는 래퍼 클래스 이므로 예외) 참조형 변수에는 주소(참조값)가 들어가 있다. - 해당 메모리에 저장되어 있는 객체에 접근해야지 사용이 가능하다. 참조형에는 객체와 배열이 있다. - ..
클래스 예제 1. 첫 번째 학생의 이름은 "학생1", 나이는 15, 성적은 90입니다. 2. 두 번째 학생의 이름은 "학생2", 나이는 16, 성적은 80입니다. 3. 각 학생의 정보를 다음과 같은 형식으로 출력해야 합니다: "이름: [이름] 나이: [나이] 성적: [성적]" 4. 변수를 사용해서 학생 정보를 저장하고 변수를 사용해서 학생 정보를 출력해야 합니다. 예시 출력: ``` 이름: 학생1 나이: 15 성적: 90 이름: 학생2 나이: 16 성적: 80 이 문제를 푸는 처음 방법으로는 아래와 같이 풀었다. 첫번째 코드 String student1Name = "학생1"; int student1Age = 15; int student1Grade = 90; String student2Name = "학생2..
오늘의 공부 오늘부터 알바를 그만두고 개발 공부에 몰두하기로 하였다. 처음부터 공부한다는 생각으로 Spring 부터 다시 천천히 공부를 하면서 블로그의 하루에 하나씩 올리는 습관을 가질려고 한다. 또한 AWS SSA 자격증도 준비중이다. 내일은? 시간표를 작성하여 공부하고, AWS 자격증 중점으로 공부할 예정이다.
오늘의 공부 마인크래프트 1.19 플러그인을 개발하면서 Java 에 대해 더 공부하고 있다. 마인크래프트 API 를 이용하여 게임 플러그인을 만들고 있는데 너무 어려운 부분도 있고, 공부하면 할수록 Java 는 너무 어렵다. 하지만, 기본적으로 개발을 하고 있고, 원하는 플러그인을 계속 개발 중이다. 아래의 사진은 만들고 있는 프로젝트이다. 실제로 서버 운영까지 해보고 그에 트래픽에 해당되는 분산처리나 리팩토링을 해야 겠다. 마인크래프트에서 DB 쓰고 있는데 JDBC 를 쓰고 있다.. Spring JPA 쓰고 싶다.. 너무 편리하던 라이브러리 인것 같다.. 실제로 JPA 하이버네이트를 적용시켜봤지만, 트랜잭션부터 EntityManager 까지 관리를 따로 설정하고 해야 하므로, 결국에는 SQL 문을 직접..
낙뎀 데미지 이벤트 Player 가 낙사 데미지를 입을때의 이벤트이다. public class EntityFallDamageEvent implements Listener { @EventHandler public void onEntityDamage(EntityDamageEvent e) { e.setCancelled(true); } } 해당 데미지를 조절하거나 Cancelled 할 수 있다.