<JDK, JRE ...차이>
JVM=(java virtual machine) 실행환경. 자바 코드 해석해서 실행시켜줌
JRE= JVM + 라이브러리
JDK= 개발툴 + JRE (JDK ≒ JDK)
Java SE (standard edition) =자바 표준 문법
Java EE=Java SE+확장버전
Java=언어
<JVM 메모리 구조>
프로그램을 수행하는데 필요한 메모리 할당 받고
이 메모리를 용도에 따라 여러 영역으로 분리하여 관리
메소드 영역=클래스 데이터, 애플리케이션에서 공유되는 데이터 저장
스택 영역=메소드 호출 시 생성되는 프레임이 저장됨. 각 프레임의 로컬 변수 등이 포함됨
힙 영역=객체와 배열이 저장. 참조 타입 변수는 힙 메모리의 객체를 참조함
<데이터 타입>
1. 기본 타입
=값 자체 저장, stack메모리에 할당
byte | 1byte | -128~127 정수형 |
short | 2byte | 정수형 |
char | 2byte | 0~65535(유니코드) 정수형. 음수 없음 |
int | 4byte | 100000 정수형 |
long | 8byte | 10000000000l |
float | 4byte | 3.14f |
double | 8byte | 3.14 |
boolean | 1byte | true/false |
2. 참조 타입
=생성된 객체 메모리 번지 저장, Heap메모리에 객체 할당
배열 타입
열거 타입
클래스 인터페이스
+) String도 참조 타입이다.
<Stack과 Heap>
변수들은 stack이라는 메모리 영역에 생성된다.
- 참조 타입 변수들은 힙 메모리 영역의 객체 번지를 저장하고
- 기본 타입 변수들은 직접 값을 저장한다.
<메모리 영역>
메소드 영역
=바이트코드 파일 읽은 내용이 저장되는 영역.
클래스별 상수, 정적필드, 메소드 코드, 생성자 코드 등이 저장됨
힙영역
=객체 생성되는 영역.
스택 영역
=메소드 호출시 생성되는 프레임이 저장되는 영역
프레임 내부에 로컬 변수 스택이 있고
여기서 기본타입 변수 참조타입 변수가 생성되고 제거된다.
<타입 변환>
1. 강제 타입변환
큰 타입을 작은 타입으로 변경되는 것은 유의해야 한다.
int → byte 를 예시로 보자
int는 4byte이다. byte는 1byte이다.
4 byte를 4등분한 다음 필요 없는 부분은 날리고 1byte만 v2로 넘긴다.
+) 만약 v1이 1byte를 넘어가는 숫자라면 v2는 이상한 숫자가 나올 것이다.
int v1=00;
byte v2=(byte)v1;
long v3=200;
int v4=(int)v3;
2. 자동 타입 변환
작은 타입이 큰 타입으로 변경되는 것은 자동.
byte v3=100;
int v4=v3;
3. 연산식에서 타입 변환
byte,short,double 등은 연산할 시 int로 바뀐다.
그래서 필요하다면 다시 바꿔줘야함
byte var11=10;
byte var12=20;
byte var13=(byte)(var11+var12);
<string ↔ 숫자>
int value1=Integer.parseInt("10");
double value2=Double.parseDouble("3.14");
boolean value3=Boolean.parseBoolean("true");
String str1=String.valueOf(10);
String str2=String.valueOf(3.14);
<입출력>
입력 받기
Scanner scanner=new Scanner(System.in);
String str=scanner.nextLine();
출력 하기
result=10;
System.out.println(result);
System.out.println();
<String>
문자열 저장
name1과 name2는 같은객체 변수 저장, name3은 별도로 생성
String name1="침착맨"
String name2="침착맨"
String name3=new String("침착맨");
문자열 비교
객체 상관없이 문자열만 비교할시 equals()
참조는 다르고 문자열은 같기때문에 '문자열 같음' 만 출력된다.
String str1=new String("침착");
String str2=new String("침착");
if(str1==str2){System.out.println("참조 같음");}
if(str1.equals(str2)){System.out.println("문자열 같음");}
문자 추출
char v1=str.charAt(2);
문자 길이
int leng=str.length();
문자열 대체
String newStr=oldStr.replace("침착맨","이병건");
문자열 잘라내기
String v1=str.substring(a,b); //a~b-1 잘라낸다
String v2=str.substring(c); //0~c-1 잘라낸다
문자열 위치 찾기
해당 문자열의 위치를 반환한다.
만약 없다면 01를 반환
int index=str.indexOf("침착맨");
문자열 포함 여부
true,false로 반환
boolean result=str.contains("배신맨");
문자열 분리
split로 문자열을 배열로
String str="A,B,C,D";
String[] arr=str.split(",");
<Array>
int[] arr={1,2,3...};
int[][] arr=new int[2][3];
다차원 배열은 배열에 다른 배열을 대입한 것.
힙에 저장된 번지를 참조한다.
기본 타입 배열 = 각 항목에 값 직접 저장
참조 타입 배열 = 각 항목에 객체 번지 저장
배열 복사
System.arraycopy(원본배열, 복사 시작 index, 새배열, 붙여넣기 시작 index, 복사 항목 수);
System.arraycopy(arr1,0,arr2,0,arr1.length);
<API Document>
=라이브러리에서 사용할 수 있는 것들 설명서
https://docs.oracle.com/en/java/javase/21/docs/api/index.html
Overview (Java SE 21 & JDK 21)
This document is divided into two sections: Java SE The Java Platform, Standard Edition (Java SE) APIs define the core Java platform for general-purpose computing. These APIs are in modules whose names start with java. JDK The Java Development Kit (JDK) AP
docs.oracle.com
<Enum 타입>
참조 타입
public enum week {MONDAY,TUESDAY}
Week today=Week.MONDAY;
<computer 시간정보>
calendar
import java.utils.Calendar;
Calendar now=Calendar.getInstance();
int year=now.get(Calendar.YEAR);
int month=now.get(Calendar.MONTH);
<객체 지향 언어>
객체 지향 특징
캡슐화=(정보 은닉)객체의 데이터,메소드를 묶어서 내부 동작을 감추는 것
+) DTO(Data Transfer Object)=정보 전달용. 정보 전달만 가능하다. 그래서 getter/setter만 존재한다.
+) VO(Value Object)=로직을 포함할 수 있다. 생성자를 사용한다.
상속=부모객체의 데이터와 메서드 자식 객체가 사용하는 것. 코드 재사용성, 유지보수 시간 최소화
다형성=객체에 따라 다른 동작을 하는 것. 상속과 인터페이스로 구현
클래스=객체를 생성하기 위한 틀 (생성자, 필드, 메소드 등 포함)
- 필드=객체 데이터 저장하는 변수같은 존재 (고유, 상태, 부품 데이터 존재)
- 생성자=new로 객체 초기화
- 메소드=객체가 수행할 동작
객체=클래스로 만들어낸 것 / 객체 생성 - new 클래스()
인스턴스=클래스로 만들어져 실제 사용하는 객체
<Class>
public class ClassName //CamelStyle로 Class 이름 설정
{
int fieldName; //field
ClassName(String str, int num) { } //생성자 : 생성자 선언 안하면 기본 생성자가됨
int methodName() { } //method
}
<field vs 변수>
method안에 선언된 것은 변수(local변수)
class선언 후 선언된 것은 field 변수
<생성자>
생성자를 호출 - 생성자를 실행 - 객체 완성됨
Car myCar=new Car("granger","black",300);
생성자 overloading - 객체 필드 다양한게 초기화하기 위해, 생성자 매개변수 다르게 해서 여러개 선언 하는 것.
<함수와 메소드>
호출하는 객체가 있는 경우 메소드, 없는 경우 함수
+ 모든 메소드는 클래스에 들어가있다.
+ 메소드명은 첫 문자 소문자이다.
<메소드 기본 구조>
접근 제한자, return type, 메소드명, 매개변수, return data
public String name(String n)
{ return n; }
'개발 > Java' 카테고리의 다른 글
[Java] java.base 모듈 (0) | 2024.12.05 |
---|---|
[Java] 자바 예외 (0) | 2024.12.05 |
[Java] Interface (0) | 2024.12.04 |
[Java] 상속 (0) | 2024.12.04 |
[Java] 클래스 (0) | 2024.12.03 |