일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 배열
- Sort()
- qqOperater
- dart
- 자바
- js
- 자바스크립트
- Spring
- 삼항연산자
- 콘솔게임
- git
- Pug
- mybatis
- 네임드생성자
- 코딩테스트
- push함수
- java
- DB
- int와 integer
- Middleware
- Oracle
- 깃허브
- 다형성
- React
- 리액트
- Node.js
- 생성자
- app.use
- 추상클래스
- 오류
- Today
- Total
평행코드
객체와 클래스 (인스턴스 필드와 클래스필드의 차이) 본문
클래스의 등장 배경
- 객체의 특성에 대한 정의를 한 것으로 캡슐화를 통해 기능을 포함한 개념,
사물이나 개념의 공통 요소를 추상화(abstraction)하여 정의
ex) 제품의 설계도, 빵 틀
클래스는 설계도
객체는 제품
추상화
- 유연성을 확보하기 위해 구체적인 것은 제거한다는 의미
프로그램에서 필요한 공통점을 추출하고,
불필요한 공통점을 제거하는 과정 (머리색이나 신체조건등...불필요한내용들제거)
구체화되어있는정보들을 뽑아서 정보를 만든다.
구체화되어있다는 것은 키 몸무게 각종 자세한 내용들을 다 알고 있어야하는데,
그런 정보는 필요가 없기 때문에 추상화를 시킨다
캡슐화
캡슐화 (Encapsulation) + (정보은닉)
데이터를 감춰놓고 내가 원하는 시점에 데이터를 이용할 수 있는 기능을 사용해서 이용하게끔 하는 것
- 캡슐화의 원칙
1. 클래스의 멤버 변수에 대한 접근 권한은 private을 원칙으로 한다.
2. 클래스의 멤버 변수에 대한 연산처리를 목적으로 하는 함수들을클래스 내부에 작성한다.
3. 멤버 함수는 클래스 밖에서 접근할 수 있도록 public으로 설정한다.
클래스 접근제한자
public : 같은 패키지 내 전체에서 사용가능
접근제한자를 쓰지 않으면 같은 패키지 안에서만 사용가능
필드 = 멤버변수
저장할 수 있는 영역
초기화블럭
public class InitialTest {
public int no = 0; // 인스턴스 필드
private static int count = 0; // 클래스 필드
}
{
no = ++InitialTest.count;
}
public class InitialMain {
public static void main(String[] args) {
InitialTest it = new InitialTest();
System.out.println("it " + it.no+ " " + it.age +" " + it.name
+" " + it.height);
InitialTest it2 = new InitialTest();
System.out.println("it2 " + it2.no+ " " + it2.age +" " + it2.name
+" " + it2.height);
}
}
no++ 이렇게하면 새로운 인스턴스를 생성해도 1밖에 나오지 않았음
no = ++InitialMain.count 이렇게하면 1, 2 이런식으로 증가된값이 잘 나왔다.
왜 이런 현상이 일어나냐면 인스턴스 변수는 인스턴스가 생성될 때마다 생성되므로
인스턴스마다 각기 다른 주소값을 가지지만,
정적 변수는 모든 인스턴스가 하나의 저장공간을 공유하고,
항상 같은 값을 가지기에 나타난 현상이기 때문이다.
'Java' 카테고리의 다른 글
메소드 Getter와 Setter (0) | 2023.09.07 |
---|---|
배열과 2차원 배열 (0) | 2023.09.06 |
Java) 가위바위보게임 만들기! (0) | 2023.09.03 |
Java) 몬스터를 사냥하는 게임을 만들어보자! (0) | 2023.09.03 |
조건문 (0) | 2023.09.01 |