본문 바로가기

JAVA

(12)
JAVA의 메모리 구조, 멀티 스레드 공유 변수 문제 T메모리 구조자바의 메모리는 코드 실행 영역과 데이터 저장 영역으로 나뉩니다. 데이터 저장 영역은 T메모리 구조를 가집니다. T메모리 구조는 스태틱 영역, 스택 영역, 힙 영역으로 나뉘어 집니다. 스태틱 영역에는 클래스 관련 메모리가 올라갑니다. JVM의 전처리 과정 (스태틱 영역)- 모든 자바 프로그램은 반드시 java.lang 패키지를 포함하기 때문에 이 패키지를 스태틱 영역에 올려놓습니다. - 다음으로 JVM은 개발자가 작성한 모든 클래스와 import 패키지 역시 스태틱 영역에 올려놓습니다. 스택 영역- main() 메소드가 시작되면 스택 영역에 main() 스택 프레임이 형성됩니다. - if문이나 반복문 같이 여는 중괄호를 만날 때마다 스택 프레임이 하나씩 생깁니다. (클래스 정의 괄호 제외) ..
JDK, JRE, JVM 용어 정리 CBD (Component Based Development) : 컴포넌트 기반 개발, 애플리케이션을 의미 있는 단위로 구분하고 그 단위를 하나씩 부품으로 개발해 완성하자는 기법. 블록화 개발이라고도 함 SOA (Service Oriented Architecture) : 실제 현실의 업무를 기준으로 개발하자는 사상 개념과 제품을 분리해서 이해하자 개념 제품 OOP C++, java, c# JVM JDK JRE RPG 게임에서 당신의 아바타가 게임 내에서 개발 도구를 이용해 프로그램을 개발하고, 그 프로그램을 RPG 게임 내의 컴퓨터에서 실행한다고 생각해보자. - 게임 내의 가상의 컴퓨터 : JVM (Java Virtual Machine) - 가상의 컴퓨터를 제어하는 운영체제 : JRE (Java..
[JAVA] StringBuffer로 equals 쓰기 오류 팰린드롬 문제를 풀다가 StringBuffer에서 reverse라는 메소드를 쓸 수 있어서 이 메소드로 풀어보았습니다.public static void main(String[] args){ Scanner sc = new Scanner(System.in); String str = sc.nextLine(); str.trim(); StringBuffer s = new StringBuffer(str); StringBuffer r = new StringBuffer(str); r.reverse(); int flag = 0; if(s.equals(r)) flag = 1; System.out.print(flag); sc.close(); }분명 출력으로 확인했을 땐 값이 같았는데 자꾸 flag가 0이 나왔습니다. Str..
[JAVA] 5주차 | 멀티스레드 개념, 동기화 문제 스레드 (Thread) - 하나의 프로세스 내부에서 동작 - 사용자가 작성한 코드 - JVM에 의해 스케줄링 되는 실행 단위 멀티 스레딩 - 하나의 응용프로그램을 동시 처리가 가능한 여러 작업(코드)으로 분할 - 작업 개수만큼 스레드 생성 (각 스레드가 하나의 작업을 처리하는 방식) - 모든 스레드는 프로세스(응용 프로그램) 내부의 자원과 메모리 공유 - 한 스레드가 대기하는 동안 다른 스레드가 동작. 프로그램 동작 시간 지연을 줄임 --> 스레드는 무언가의 일을 동시에 하고싶을 때 병렬처럼 쓰입니다. main함수에서는 main 스레드가 작동하고, 새로운 스레드를 만들어서 .start()로 호출하면 새로운 스레드와 메인 스레드가 동시에 작동합니다. 스레드 생성 방법 Thread 클래스를 상속 1) 스레드..
[JAVA] 4주차 | 테트리스 게임 만들기 https://zetcode.com/javagames/tetris/ 출처입니다. https://github.com/janbodnar/Java-Tetris-Game 전체 코드는 여기서 볼 수 있습니다. 1. 우선 테트리스에는 tetrominoes라 불리는 7개의 테트리스 블록이 있습니다. 2. Swing painting API와 java.util.Timer를 사용합니다. 3. 모양은 square by square로 움직입니다. (직각으로) 4. 게임은 바로 시작되며, p키를 누르면 게임을 멈출 수 있습니다. 5. d키를 누르면, 모양이 바로 바닥으로 떨어집니다. (speed-up) 6. 일정한 속도로 게임이 진행되며, 가속은 구현하지 않습니다. 7. 지워진 라인만큼 점수를 얻습니다. 1) Shape 클래스..
[JAVA] 3주차(2) | 제네릭(Generic), Collection, ArrayList 1. 제네릭(generic) 제네릭(generic)이란 class, interface, method 등을 특정 타입(class)에 종속되지 않고 여러 다른 타입에 적용될 수 있도록 일반화된 타입 매개 변수를 말한다. 예를 들어 문자열인 멤버 id와 정수인 멤버 value가 있다. 만약 value가 정수가 아닌 문자열인 객체를 생성하고 싶다면 새로운 class를 만들어야 할 것이다. 혹은 id를 정수로 하고 싶은 경우나 id와 value를 모두 정수로 하고 싶은 경우에도 각각 새로운 class를 생성해야 할 것이다. 이러한 상황에서 같은 변수의 타입을 필요에 따라 변경 가능하도록 해주는 것이 generic 이다. ③ class 이름 뒤에 가 있음을 유의해 보라. Sample class 내에서 사용되는 두 ..
[JAVA] 3주차(1) | Java.base모듈, Wrapper Java.base 모듈 java.base 모듈 패키지 용도 java.lang 자바 언어의 기본 클래스 제공 (해당 패키지의 클래스는 import 없이 사용) 예) String, System, Integer, Double, Exception, RuntimeException 등 java.util 자료 구조와 관련된 컬렉션 클래스 제공 예) Scanner java.text 날짜 및 숫자를 원하는 형태의 문자열로 만들어주는 포맷 클래스 제공 java.time 날짜 및 시간을 조작하거나 연산하는 클래스 제공 java.io 입출력 스트림 클래스 제공 java.net 네트워크 통신과 관련된 클래스 제공 java.nio 데이터 저장을 위한 Buffer 및 새로운 입출력 클래스 제공 java.lang 패키지 import..
[JAVA] 2주차 | 패키지(package), getter와 setter 패키지 서로 관련된 클래스와 컴파일된 클래스 파일(.class)들을 하나의 디렉토리에 묶어 놓은 것 클래스를 식별하는 용도로 사용(import java.util.Scanner) 상위패키지와 하위패키지를 dot(.)로 구분 패키지 선언 소스 파일 최상단에 위치 package 상위패키지.하위패키지; ex ) com.회사명.프로젝트 import문 다른 패키지에 있는 클래스를 사용할 경우 import문을 이용해서 패키지 이름을 명시 접근 제한자 접근제한자를 외우려고 하지말고 일단 알기만 하면 된다. Getter와 Setter 객체 지향 프로그래밍의 특징 중 하나가 캡슐화이다.