쌍용교육센터에서 공부한 내용을 정리하며 기록하는 글이고 주관적인 생각이 들어갈 수 있습니다.
잘못된 내용이나 피드백 및 생각 공유는 언제든 환영입니다.
댓글로 남겨주시면 확인 후 수정하겠습니다.
특수문자(Escape Character) : 문자열(")안에서 사용하며 기능을 가진 문자
주로 사용하는 특수문자 문법 : ("₩문자")
- "₩t" : Tab키의 기능 사용법 => "안녕\t하세요" 폰트에 따라 다르게 표현될 수 있다.
- "₩n" : 개행(new line) 사용법 => "안녕\n하세요\n"
- "₩₩" : 시작문자₩를 일반문자₩로 출력
- "₩"" : "를 출력
변수(Variable)
- 프로그램에서 사용될 값을 메모리에 일시적으로 저장하고 사용하기 위해
- 변수명에 따라 가독성이 향상된다.
- 변수를 선언하는 위치에 따라 instance(member), static(class), local 3가지로 구분된다.
- instance(member) variable : 객체가 생성될 떄 만들어지고 객체가 소멸되면 사라진다.
- static(class) variable : 프로그램이 실행되면 만들어지고 프로그램이 실행이 종료되면 사라진다.
- local variable : 메소드가 호출되면 만들어지고 메소드 호출이 끝나면 사라진다.
instance(member) variable
- class field에 선언하는 변수
- 객체화 하여야만 사용할 수 있는 변수(객체명.변수명으로 사용)
- 객체마다 같은 이름의 변수가 만들어지고 사용되는 변수
- heap memory에 적재되고, 객체가 소멸되면 heap memory에서 삭제되는 변수
- 자동 초기화가 된다.(변수가 생성될 때 정해진 값이 할당 되는 것)
- 접근지정자에 따라 다른 클래스에서도 사용 가능하다.
접근지정자(access modifier) - 패키지 개념, 메모리 개념
패키지 개념(1개만 사용 가능)
- pubilc : 모든 패키지의 모든 클래스에서 접근 가능하다.
- protected : 같은 패키지의 다른 클래스에서 접근 가능하다.
- protected : 패키지가 다르면 상속관계의 자식클래스에서만 접근 가능하다.
- default : 같은 패키지의 다른 클래스에서 접근 가능, 패키지가 다르면 접근 불가하다.
- private : 클래스 안에서만 접근 가능하다.
메모리 개념(n개 사용 가능)
- static : 모든 메모리에서 접근 가능하다.
- final : 값 변경 불가
- transient : 직렬화 방지 키워드
class diagram : 클래스와 클래스간의 관계를 도식화
public class Hello{
public int a;
protected int b;
int c;
private int d;
}
- + : public
- # : protected
- - : private
- ~ : default
+Hello |
+ : public # : protected - : private ~ : default |
method |
객체화
- instance(member) 변수를 static 영역에서 사용하기 위해 heap 메모리 에 올려 놓는 것
- 객체화로 생성된 객체(instance)에 member로 instance 변수가 포함된다.
- 문법 : 클래스명 객체명 = new 클래스명(); ex. Test t = new Test();
- 객체 생성용 키워드는 heap에 저장된다.
- 기본형은 값을 가지지만 참조형은 주소를 가진다.
JVM
- method 영역 : 실행되는 bytecode가 적재, static 변수 저장, 호출한 method 적재
- stack 영역 : 지역변수가 저장
- heap 영역 : 객체 저장, instance 변수 저장
JVM 순서
- new로 객체를 생성하고, 생성된 객체의 주소를 stack 영역에 저장한다.
- stack 영역의 객체를 사용하면 가지고 있는 heap의 주소가 나온다.
- heap의 주소를 사용하여, instance 객체 안의 instance 변수를 사용한다.
instance 객체 : 주소를 가지고 있음
instance variable : instance 객체 주소 안에 있는 변수들
instance variable의 초기화 값
- 객체를 생성하면 heap에 intstance variable가 생성된다.
- 값을 설정하지 않아도 자동으로 정해진 값이 할당된다.
- 객체화 후 값을 할당하지 않고 바로 사용하더라도 에러가 발생하지 않는다.
데이터형 | 초기화 값 |
정수형(byte, short, int, long) | 0 |
문자형(char) | ₩u0000 |
실수(float) | 0.0 |
불린(boolean) | False |
참조형(class, String, array) | null (heap의 주소를 가지지 않는다.) |
static(class) 변수도 동일한 값을 가진다.
static(class) variable
- 공용 변수
- Java Program이 실행되면 method 메모리에 올라가는 변수
- 하나의 변수가 만들어지고 모든 객체는 하나의 변수를 사용한다. (공용)
- 모든 영역에서 사용할 수 있다.
- 객체화를 하지 않아도 사용할 수 있다.
- instance variable보다 참조하는 속도가 빠르고 메모리를 적게 사용한다.
- 변경된 값이 모든 객체에 반영된다.
- 사용하지 않더라도 메모리를 계속 점유한다. (메모리 낭비)
- 작성법 : 접근지정자 static 데이터형 변수명;
- 사용법 : 클래스명.변수명 <= 특정 객체에 속하지 않기 때문에 객체명으로 사용하지 않는다.
method
- 자주 사용될 코드(업무)를 미리 정의해두고, 필요한 곳에서 호출하여 사용하기 위해서
- 코드의 중복성을 최소화할 수 있다.
- 코드를 업무별로 구분할 수 있다.
- Instance method, static method로 작성한다.
- Instance method : 객체가 가지고 있는 값을 사용해 처리해야 하는 경우 => 객체화 후 사용
- static method : 입력된 값으로만 처리해야 하는 경우 => 객체를 생성하지 않고 사용
작성법
접근지정자 반환형 method명(매개변수){
구현할 코드
}
- 접근지정자 : 패키지 개념은 1개, 메모리 개념은 n개 사용 가능
public : 패키지에 상관 없이 클래스 외부에서 호출 가능
protected : 같은 패키지의 다른 클래스에서 호출 가능
패키지가 다르면 상속관계의 자식클래스에서 호출 가능
default : 같은 패키지의 다른 클래스에서 호출 가능
패키지가 다르면 호출 불가능
private : 클래스 안에서만 호출할 때
static : 객체화를 하지 않고 method를 호출할 때
final : Override를 막을 때
synchronized : Multi thread에서 동시호출을 막을 때 - 반환형 : 업무처리한 결과를 호출한 곳으로 돌려줄 때 기본형이든 참조형이든 1개만 사용 가능
- 매개변수 : method가 일처리에 필요한 값들을 넣어주는 변수
method 호출
- instance method => 객체화 후 객체명으로 호출
class Test{
public void method(){
}
}
//1. 객체화
Test t = new Test();
//2. 호출
t.method();
- static method => 객체화 없이 클래스명으로 호출
class Test{
public static void method(){
}
}
//1. 호출
Test.method();
method의 4가지 형태
고정적인 일을 하는 형 : 반환형 없고, 매개변수 없는 형
public void method(){
}
//호출) 객체명.method명();
가변적인 일을 하는 형 : 반환형 없고, 매개변수 있는 형
public void method(매개변수){
}
//호출) 객체명.method명(매개변수에 맞는 데이터 값);
값으로 사용하는 method - 고정 값, 가변 값
- method의 반환형이 void가 아닌 다른 형이 되어야 한다.
- method의 가장 마지막 줄에 반드시 return 값이 정의되어야 한다.
고정 값 : 반환형 있고, 매개변수 없는 형
public 반환형 method명(){
return 값;
}
//호출) 데이터형 변수명=객체명.method명();
가변 값 : 반환형 있고, 매개변수 있는 형
public 반환형 method명(매개변수){
return 값;
}
//호출) 데이터형 변수명=객체명.method명(매개변수에 맞는 데이터 값);
배우고 느낀점
오늘 배운 것들이 자바 공부를 하면서 가장 핵심적이라고
생각될 정도로 중요한 것들을 배운 것 같다.
변수의 종류, 메소드 호출의 종류, 접근지정자와
JVM에서 메모리와의 관계 등 지속적으로도 공부를
해야한다는 게 느껴졌다. 메모리에 대해서는 잘 익숙하지
않으므로 그 부분에 대해 더 공부를 해야겠다.
'성장 일기 > 쌍용교육센터' 카테고리의 다른 글
1214/메서드 (0) | 2022.12.14 |
---|---|
1213/객체지향 (0) | 2022.12.12 |
1209/반복문 (0) | 2022.12.12 |
1208/조건문, 반복문 (0) | 2022.12.12 |
1207/소스코드 동작, 이클립스 개요 (0) | 2022.12.12 |