일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
- Sort
- 자바스크립트
- 이차전지관련주
- 클린아키텍처
- 코딩테스트
- 알고리즘정렬
- k8s
- 스프링핵심원리
- 스프링 핵심원리
- 카카오 면접
- 스프링부트
- java
- effectivejava
- 카카오
- 이펙티브자바
- 김영한
- 알고리즘
- 자바
- 예제로 배우는 스프링 입문
- Effective Java
- 티스토리챌린지
- JavaScript
- Effective Java 3
- 스프링
- 엘라스틱서치
- 오블완
- ElasticSearch
- Spring
- 이펙티브 자바
- kubernetes
- Today
- Total
Kim-Baek 개발자 이야기
자바 기본 (11) - 생성자, 접근제한자, VO 본문
예전에 자바를 처음 공부하던 때, 네이버 블로그에 정리한 내용을 이제 티스토리로 옮기고자 한다
◎ this( [ 값, ... ] ) 의 사용
- 생성자에서 오버로딩된 다른 생성자 호출시에 사용한다
- 반드시 생성자 구문의 첫 명령으로만 올 수 있다.
ex) this( ); , this( 10 ); , this( 10, "abc" );
-> 생성자에서 다른 생성자를 호출하고 싶을 때 사용!
* A( ) {
다른 내용 -> 조건문이나 반복문의 사용도 허용이 안된다. 무조건 첫번째에 와야한다.
this( 10 )
}
* A ( int i , int j , String s ){
this.i = i;
this.j = j; -> 이 두줄을 this( i, j ) : 코드의 편리를 위해. i, j 는 다른 생성자에서 초기화
this.s = s;
}
A ( int i , int j ){
this.i = i;
this.j = j;
}
◎ Local 변수
- Default 초기화가 일어나지 않는다
- 알아서 default 값을 넣어야 한다 (내가 생각하는 기본값)
void method( ) {
int i; - 사용하기 위해서는 초기화가 필요하다 : i = 10; ->의미 없는 값이 아닌, 값이 없다는 것을 지칭하는 것!
}
* Class A{
int age; -> instance 변수는 default 초기화가 된다
}
new A ( );
◎ instance 변수 초기화 3단계
1. 묵시적 초기화(Default 초기화)
- 변수 type 의 기본값을 넣는다
2. 명시적 초기화
- code 상에 대입한 값을 넣는다.
3. 생성자 실행에 의한 초기화
- 생성자 code 에서 대입한 값을 넣는다.
Class Member()
{
int age = 20;
public Member(int age)
{
this.age = age;
}
}
- new Member(10)를 했을때 age 의 변화는
1. 묵시적 초기화에 의해 0 이 되었다가
2. 명시적 초기화에 의해 20이 되고 마지막으로
3 생성자 실행에 의한 초기화로 10이 들어가게 된다.
묵시적 초기화에서 값이 0이였는데 명시적 초기화로 다시 0이 들어가게 되면 값이 그대로 인것이 아니라 0이 다시 들어가게 되는 것이다.
-> 메모리 (heap) 에 저장된다.
◎ 자바의 3대 특징 (캡슐화, 상속, 다형성)
- 캡슐화(은닉성)
- 비슷한 기능끼리 묶는 것. 캡슐화를 했다(객체를 만드는 과정)
- 각각은 독립적으로 구분이 있기 때문에 사용범위의 제한이 가능하다 -> 은닉성
◎ 접근제한자(access modifier)
- 모두접근이 가능하다 -> public
- 같은 class 안에서만 접근이 가능하다 -> private ( 보통 변수에 붙여서 사용한다)
+ protected
* 알려주기 싫어서 감추는 것이 아니라 마음대로 변경이 되지 않게 하려고!
ex) public int age;
private int age;
- class 의 구성요소는 instance 변수, instance 메소드, 생성자가 있는데 여기에서 instance 메소드, 생성자의 경우 private 를 통해 감출 수 있으나 객체가 제공하는 기능인데 제한을 한다는 것은 이상하다!
재고 객체{
재고량 = 25
}
주문 객체{
주문(50){
if(주문개수<재고)
주문처리
}
}
※ 이 경우 주문이 이루어 지면 안된다. 하지만 '재고량 = 주문개수' 라는 코드가 삽입이 되면 실행이 되어버린다. 실제로는 말이 안되는 결과이다. private로 이런걸 막으면 아예 접근조차 불가능하다!
-> 해결책은 메소드이다
※ 메소드를 통해 바꾸는 것과 변수로 그냥 바꾸는 것의 차이
- 변수로 넣는 것은 그냥 데이터 대입만 가능하지만, 메소드는 검증(조건문 등)이 가능하다!
- Encapsulation (캡슐화) : 연관싱 있는 Data(변수)와 동작(메소드)을 class로 묶은 것
-> 은닉성(information hiding) - 접근제한자를 이용해 객체의 멤버(메소드, 생성자, 변수)들에 대한 외부 접근을 제한하는 것
- 접근제한자 (access modifier) : public - 접근제한이 없는 것, private - 같은 class 내에서만 접근가능
instance 변수 : 주로 private
instace 메소드, 생성자 : public
-> instance 변수는 private로 감추고, public 메소드를 통해 변경/조회 할 수 있도록 한다.
Class person{
private int age; private boolean; -> setMarraige(), isMarriage()
변경 -> public void setAge( int age ) { -> set 변수명 : setter 메소드
if(나이의 범위) this.age = age;
}
조회 -> public int getAge( ) { -> get 변수명, is 변수명(타입이 boolean 일때) : getter 메소드
return age;
}
※ 객체 중 속성을 주로 갖는 객체 : 다양한 데이터를 관리하는 타입의 값으로 주로 쓰인다 (Reference type), primitive 로는 표현이 불가능하다
값으로 사용되는 객체 : valueObject
size : 34 30 40
제조: 삼성 LG Sony -> 하나하나의 객체가 값으로 들어간다
가격: 300 200 150
-> Class -> DataType 이고 객체 -> 값이 된다.
◎ ValueObject (Data Transfer Object, Domain Object)
-> VO ( DTO, DO )
-> 값으로 사용되는 객체를 생성하기 위한 class
-> attribute 중심의 class
-> 업무처리 로직은 제공하지 않는다.
-(동작) 메소드 중심 class : Business Manager(Service) Class
- 구현 패턴
class 이름 : Data 명, Data명VO, Data명DTO, Data명DO
구현의 규칙
1. public class 로 선언
2. instance 변수의 접근제한자 private
3. public setter/getter 메소드 제공
4. 매개변수 없는 생성자, 모든 instance 변수 초기화하는 생성자 , +a 제공 -> 4번까지는 필수
5. 모든 instance 변수의 값을 String 으로 묶어 리턴하는 메소드 제공
-> public Stiring toString()
6. class 선언시 implements Serializable 추가
7. equals(), hashcode() 메소드 구현
※ UML 에서 접근제한자 표기
private => -
public => +
ex) private String name -> - name : String;
public int go ( int a ) -> + go ( a : int ) : int
'개발 > java basic' 카테고리의 다른 글
자바 기본 (13) - 가변인자, 패키지, import (0) | 2020.10.04 |
---|---|
자바 기본 (12) - 자바의 메모리 영역, 호출 스택 (0) | 2020.10.03 |
자바 기본 (10) - 오버로딩, 생성자 (0) | 2020.10.01 |
자바 기본 (9) - 객체와 클래스 (0) | 2020.09.30 |
자바 기본 (8) - 이클립스 사용, 객체지향과 절차지향 (0) | 2020.09.29 |