Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 이더리움
- Actor
- Play2 로 웹 개발
- Play2
- 파이썬 머신러닝
- 플레이프레임워크
- Golang
- 스칼라 동시성
- play2 강좌
- 스칼라 강좌
- 파이썬
- Hyperledger fabric gossip protocol
- akka 강좌
- 파이썬 데이터분석
- 안드로이드 웹뷰
- Adapter 패턴
- 주키퍼
- hyperledger fabric
- 스칼라
- 스위프트
- 하이퍼레저 패브릭
- 하이브리드앱
- play 강좌
- 블록체인
- 파이썬 동시성
- 엔터프라이즈 블록체인
- 파이썬 강좌
- CORDA
- Akka
- 그라파나
Archives
- Today
- Total
HAMA 블로그
C++ 멤버변수 와 자바 멤버변수 초기화 본문
C++
일반 멤버변수 초기화
- C++ 같은 경우는 멤버변수를 선언과 동시에 초기화를 못시키기때문에 (수정: C++11 부터는 가능) 생성자에서 초기화하며 ,
생성자 내부 말고 ,생성자 초기화리스트에서 생성하는 효율적인 이디엄이있으며,
- 자바의 경우 멤버번수를 자동 초기화 해주지만 C/C++ 은 그러지 않기때문에 초기화 과정이 필요함.
class A {
B b = new B(); <-- 에러이다.
}
- 초기화 리스트를 사용하지 않은 경우.
class A
{
int x;
int y;
public:
Point(int a, int b)
{
x = a;
y = b;
}
int x;
int y;
public:
Point(int a, int b)
{
x = a;
y = b;
}
};
- 초기화 리스트를 사용한 경우.
class A
{
int x;
int y;
public:
Point(int a, int b) : x(a), y(b)
{
}
{
int x;
int y;
public:
Point(int a, int b) : x(a), y(b)
{
}
};
이 경우는 int x = a; 와 같이 바로 초기화 된다.
const 멤버변수
const int a = 20; //에러 발생
const int i; //에러 발생
const int i; //에러 발생
const 는 바로 초기화 해야한다. 이때 멤버변수라 문제가 생기는데 이때 초기화 리스트를 사용할수 있다.
초기화 리스트에서 초기화 안하면 에러발생한다.
초기화 리스트에서 초기화 안하면 에러발생한다.
#pragma once
class test
{
const int n;
public:
test(void);
~test(void);
};
test::test(void):n(0)
{
}
정적 멤버변수
static int s; // ok
static int s = 10; //에러 발생
const static int s = 10; //ok
const static int s = 10; //ok
////////////////////// test.h /////////////////////
#pragma once
class test
{
const int n;
static int s;
const static int cs;
public:
test(void);
~test(void);
};
////////////////////// test.cpp /////////////////////
#include "test.h"
const int test::cs = 10; // 이렇게 초기화도 가능하다.
int test::s = 10;
test::test(void):n(0)
{
}
자바
- 자바같은경우는 ,멤버변수(인스턴스) 변수를 생성자 뿐만 아니라 선언하면서 바로 대입가능.
- 자바 경우는 멤버변수는 자동 초기화 , 지역변수는 자동초기화 안됨.
- 자바의 경우
- 자바의 경우
Example 1:
class A {
B b = new B(); <-- 정상
}
Example 2:
class A {
B b;
A() {
b = new B(); <-- 정상
}
}
Exampe 1 과 Example2 방식의 차이점 정리 (선언하자마자 대입 vs 나중에 대입)
- 둘간의 근본적인 차이는 없다. (둘다 컴파일시 생성자에서 초기화 된다)
- 첫번째 방법이 좀 더 읽기 쉽다.
- 첫번째 방법으로는 예외처리가 쉽지 않다. ( 선언 아래에 {} 를 추가하여 할수있다)
- 첫번째 방법은 너무 이른 할당을 하게 한다.
- 두번째 방법은 생성자가 여러개일때 이곳 저곳에 해야한다. 까먹을수도.. (init() 함수이용)
- 첫번째 방법으로는 DI 를 '쉽게' 하기 어렵다.
- 상황에 맞춰서 쓰도록~
'Java' 카테고리의 다른 글
자바8 Streams API 를 다룰때 실수하기 쉬운것 10가지 (0) | 2016.05.22 |
---|---|
자바로 MS 문서 다루기 (0) | 2015.11.05 |
자바 EnumBitSet 사용하기 (0) | 2015.09.01 |
자바 enum 정리 (0) | 2015.09.01 |
자바 volatile / C volatile 정리 (0) | 2015.09.01 |
Comments