
- Storage Class (저장 기억 부류)
지역 변수 : 메소드 내부에 선언된 변수
전역 변수 : 클래스 내부에 혹은 메소드 외부에 선언된 변수
정적 변수 : static이 붙은 변수
종류 | 지역 변수 | 전역 변수 | 정적 변수 |
초기화 | 직접 | 자동 | 자동 |
생명주기 | {} (중괄호) 내에서 | 프로그램 종료 전 | 프로그램 종료 전 |
보안성 | 상 | 중 | 하 |
여기서 보안성은 접근하기 어려운 정도를 의미한다.
여기서 static변수는 static이 붙은 메소드에서 사용이 가능하다. 다른 메소드에서는 사용할 수 없다.
그리고 static이 붙은 메소드 내부에서는 일반 전역 변수를 사용할 수 없다.
메소드 내에서 선언된 지역변수는 전역 변수보다 우선시되기 때문에 이름이 같은 변수가 있다면, 지역변수를 우선으로 사용한다.
- static 변수 사용 예시
int data1 = 10;
static int data2 = 20;
public static void main(String[] args) {
System.out.println(data2);
// 일반전역변수는 static메소드 내에서 사용할 수 없기 때문에 오류가 난다.
// System.out.println(data1); -> 오류
}
- 클래스
공통된 요소들을 하나로 묶어놓은 틀
여러 변수들과 메소드들을 둘 다 관리하고 사용하기 위해 설계해서 사용한다.
1. 주어이다.
모든 문장 맨 앞에 클래스가 나오고, 영어는 맨 앞을 대문자로 적는다.
따라서 클래스는 주어이고, 대문자로 시작한다.
String food = "banana";
Monkey.eat(food);
[주어] [동사] [목적어] // 주어 : 클래스, 동사 : 메소드, 목적어 : 변수
2. 타입이다.
클래스는 추상적인 개념으로, 클래스 안에는 필드가 존재한다.
추상적인 것을 바로 사용할 수 없기 때문에 그 필드들을 구체화시킨 대상이 필요하다.
이를 "객체"라 부르고 instance variable이라고 한다.
※ instance
예, 예시라는 의미이다. 추상적인 개념의 한 예시로서 객체가 나오기 때문에 instance variable이라 부른다.
(자동차인데 예를 들어 내 차이다.)
[클래스] [객체]
추상적인 개념의 클래스를 가지고 찍어내서 객체를 만드는 작업을 "객체화" 라고 한다.
따라서 클래스는 그 때 찍어내는 객체의 타입이다.
- 클래스의 선언
class 클래스명 {
필드선언 (변수, 메소드)
}
- 클래스의 사용
클래스는 추상적인 틀이기 때문에 먼저 객체화를 진행해야 한다.
클래스명 객체명 = new 클래스명(); // 필드만들기
객체.변수
객체.메소드
하나의 저장공간에는 단 한 개의 값만 담을 수 있다.
필드에는 여러개의 값이 존재하기 때문에 필드는 다른 곳에 할당되고 할당된 필드의 주소 값을 저장하는 것이 객체이다.

(1) Car 클래스 : mycar, momcar에 쓰일 공통적인 변수, 메소드를 선언한 틀
(2) mycar 객체 : Car 클래스의 틀을 가지고와서 mycar 객체를 만들어 mycar필드를 만들어 준다.
이 필드가 저장된 주소를 100번지라고 가정 했을 때, 100번지 주소의 brand, color, price와 메소드 start(), stop()이 존재한다.
(3) momcar 객체 : 위의 mycar객체와 동일하게 구성되지만, 주소가 다르다.
실습 해보기 !
Car 클래스를 만들고, mycar객체로 사용하기
Car 클래스
class Car {
// 클래스 만들고 필드에 공통으로 쓰이는 변수, 메소드 선언
String brand;
String color;
int price;
void engineStart() {
System.out.println("시동 켜기");
}
void engineStop() {
System.out.println("시동 끄기");
}
}
mycar로 객체 생성, 메인메소드
public class ClassTest {
public static void main(String[] args) {
// 객체만들기
Car mycar = new Car();
mycar.brand = "Ferrari";
mycar.color = "RED";
mycar.price = 65000;
System.out.println(mycar.brand);
mycar.engineStart();
mycar.engineStop();
}
}
- 생성자
클래스명 뒤에 소괄호로 만들어진다.
생성자는 메소드와 똑같이 활용 가능하다.
하지만 필드를 생성해주고 주소 값을 돌려주기 때문에 메소드라 부르지 않는다.
주소값을 자동으로 (내부적으로) 리턴하고 있기 때문에 리턴을 직접 할 수 없다.
클래스 선언 시 자동으로 생성자가 만들어지고 코드상에는 나타나지 않는다.
이런 생성자를 "기본 생성자"라고 하며, 만약 직접 생성자를 선언하게 되면 기존에 있던 (코드상에 보이지 않는) 기본 생성자는 사라지게 된다.
- 생성자의 목적
- 클래스의 필드를 똑같이 복사해서 메모리에 할당해주고 할당된 필드의 주소 값을 가지고 온다. 이 주소값을 객체 담아놓고 사용한다. (객체화의 목적)
- 생성자는 호출 시 내부의 내용을 모두 수행한다. (초기화의 목적)
'WEB > JAVA' 카테고리의 다른 글
DAY 09 : 상속, 다형성, 업캐스팅, 다운 캐스팅 (0) | 2022.01.06 |
---|---|
DAY 08 : this, 클래스 배열, 정적 필드 (0) | 2022.01.04 |
DAY 06 : 2차원 배열, 메소드 (0) | 2022.01.04 |
DAY 05 : 반복문, 배열 (0) | 2022.01.03 |
DAY 04 : 조건식, 삼항 연산자, 조건문 (0) | 2022.01.03 |