본문 바로가기
언어공부/JAVA&SPRING

[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 9회차 미션

by hobbiz 2020. 8. 18.
반응형

 

오늘은 생성자, 생성자 오버로딩, 참조자료형에 대해 공부해보았다. 

 

하나의 클래스에는 반드시 하나 이상의 생성자가 존재해야 한다.

 

기본생성자는 프로그래머가 구현하지 않은 생성자를 컴파일러가 자동으로 넣어준 것을 말한다.

 

기본생성자는 매개변수가 없고 구현부가 없다.

 

클래스에 다른 생성자를 만든 경우, 기본생성자는 제공되지 않으므로 필요시 직접 만들어주어야 한다.

 

 

 

참조 자료형은 클래스형으로 변수를 선언한다.

 

기본자료형은 사용하는 메모리가 정해져 있지만, 참조자료형은 클래스에 따라 다르다.

 

 

 

 

<추가 공부>

 

기본 생성자

출처: https://ko.wikipedia.org/wiki/%EA%B8%B0%EB%B3%B8_%EC%83%9D%EC%84%B1%EC%9E%90

 

기본 생성자(default constructor)는 프로그래머가 정의한 생성자(자바에서)가 없는, 자동적으로 컴파일러에 의해 생성되는 생성자를 가리킨다. C++의 경우에는 생성자가 자동으로 생성되었는지나 사용자가 정의했는지와 관련 없이, 인자를 제공하지 않은 생성자이다. 정식 파라미터들과 함께하는 생성자도 만약 기본 인자가 생성자의 정의에 제공된다면, 인자 없이 호출될 수 있다는 점을 주의하라.

C++

C++에서, 표준은 클래스를 위한 기본 생성자를 인자 없이 호출될 수 있는 생성자로 묘사하였다(이것은 자신의 파라미터 모두를 기본 인자로 갖는 생성자도 포함한다).[1] 예를 들면:

class MyClass { public: MyClass(); // constructor declared private: int x; }; MyClass :: MyClass() : x(100) // constructor defined { } int main() { MyClass m; // at runtime, object m is created, and the default constructor is called }

메모리를 동적으로 할당할 때, 생성자는 클래스 이름 뒤에 괄호를 추가함으로써 호출될 것이다. 이것은 어느 정도 생성자에 대해 명시적인 호출이다:

int main() { MyClass * pointer = new MyClass(); // at runtime, an object is created, and the // default constructor is called }

만약 생성자가 하나 이상의 파라미터를 갖지만, 이것들 모두가 기본 값들이라면, 이것은 계속 기본 생성자일 것이다. 각 클래스가 파라미터가 없든지 모든 파라미터가 기본 값들이든지 간에, 최대한 하나의 기본 생성자를 가질 수 있다는 것을 기억하라.

class MyClass { public: MyClass (int i = 0, std::string s = ""); // constructor declared private: int x; int y; std::string z; }; MyClass :: MyClass(int i, std::string s) // constructor defined { x = 100; y = i; z = s; }

C++에서 기본 생성자들은특정 상황에서 자동적으로 작동되므로 중요하다. 그러므로 이러한 상황에서 기본 생성자를 갖지 않는 클래스에게 이것은 오류가 된다:

  • 객체 값이 인자 목록 없이 정의되거나(예를 들면: MyClass x;) 또는 인자 목록 없이 동적으로 할당되었거나 (예를 들면: new MyClass; 또는 new MyClass();), MyClass의 기본 생성자는 객체를 초기화하는데 사용된다.

  • 객체들의 배열이 정의되면, 예를 들면 MyClass x[10];; 또는 동적으로 할당되면, 예를 들면 new MyClass [10]. MyClass의 기본 생성자는 요소들 모두를 초기화하는데 사용된다.

  • 상속하는 클래스 생성자는 자신의 초기화 리스트에서 명시적으로 베이스 클래스 생성자를 호출하지 않고, 베이스 클래스를 위한 기본 생성자가 호출된다.

  • 클래스 생성자가 자신의 초기화 리스트에서 객체 값을 갖는 것 중 하나의 생성자를 명시적으로 호출하지 않을 때, 필드의 클래스를 위한 기본 생성자가 호출된다.

  • 표준 라이브러리에서, 값이 명시적으로 주어지지 않았을 때 특정한 컨테이너는 기본 생성자를 사용해서 값을 채운다. 예를 들면 vector<MyClass>(10);는 벡터를 열개의 요소들로 초기화하며, 이것은 기본으로 구조화된 MyClass 객체로 채워진다.

만약 클래스가 명시적으로 정의된 생성자를 갖지 않는다면, 컴파일러는 이것을 위한 기본 생성자를 암묵적으로 선언하고 정의한다. 이 암묵적으로 정의된 기본 생성자는 빈 바디와 함께 명시적으로 정의된 것과 동일하다.[2]

class MyClass { int x; // no constructor, so the compiler produces an (implicit) default constructor }; int main() { MyClass m; // no error at runtime: the (implicit) default constructor is called }

만약 생성자들이 클래스에 명시적으로 정의되었지만, 모두 기본이 아니라면, 컴파일러는 암시적으로 기본 생성자를 정의하지 않을 것이다. 이것은 클래스가 기본 생성자를 갖지 않는 상황으로 이끈다. 이것은 전형적인 오류로서, 다음의 예시에 의해 입증된다.

class MyClass { public: MyClass (int y); // declaration a non-default constructor private: int x; }; MyClass :: MyClass (int y) { x = y; } int main() { MyClass m(100); // the non-default constructor is called MyClass * p; // for pointer declarations, the compiler does not need to know about constructors p = new MyClass(); // error at compilation: no default constructor return 0; }

프로그래머와 컴파일러 모두 기본 생성자를 정의하지 않았기 때문에, 이 생성은 오류가 된다.[2] 반면 C++11 에서 기본 생성자는 명시적으로 생성될 수 있다:

class MyClass { public: MyClass () = default; // force generation of a default constructor };

class MyClass { public: MyClass () = delete; // prevent generation of default constructor };

 

 

 

자료형

출처: http://www.ktword.co.kr/abbr_view.php?m_temp1=2652

 

1. 자료형 (Data Type)

시스템/컴파일러/사람 등이 인식 가능한 자료 형태

컴퓨터 내에서, 특정 비트들이 그룹핑되어, 그들끼리 사용되는(연산되는) 방식 - 例) 숫자형(정수형,실수형),문자형,논리값형,날짜형 등

 

2. 자료형의 구성

변수들이 가질 수 있는 값의 범위/크기 및 연산 가능 형태/규칙들 - 값의 `집합/범위/크기` 및 이 값들에 적용가능한 `연산`들에 따라 다르게 규정됨

ㅇ 서로다른 자료형 간에 적용 오류 및 적용 가능 범위 例) - 타입 오류 . 만일, 정수형 자료에, . 범위가 더 큰 실수형 자료를 적용하거나, . 문자열형 자료에 해당 연산 규칙과는 다른 사칙 연산을 적용하면, . 타입 오류 등이 나타남 - 자바 언어의 int 형의 가능한 `값 범위` 및 `연산자` . (-231 ~ 231-1) 사이의 정수 집합 내에서, . (+,*,-,/,%,<,> 등)의 연산자들을 사용할 수 있음

 

3. 자료형의 구분

기본 자료형,원시 자료형 (Primitive Data Type), 내장 자료형 (Built-in Data Type) - 시스템/컴파일러/인터프리터 등이 직접 제공하고, 바로 해석할 수 있는 데이터형 - 例) 수치형(정수형,실수형),논리값형,문자형 등 단순한 구조의 자료형

ㅇ 유도 자료형,파생 자료형 (Derived Data Type) => (때론, 사용자 정의 자료형 이라고도 함) - 기본 자료형이나 다른 데이터형으로부터 또는 프로그래머에 의해 유도되어 구조화된 자료형 - 例) 문자열,배열,포인터,구조체,공용체,열거형,레코드,리스트

ㅇ 참조 자료형 (Reference Data Type) <= 주로, 객체지향 언어에서 도입됨 - 변수 선언메모리 생성이 분리되는 데이터형 - 그 종류로는, `배열 참조형, 열거 참조형, 클래스 참조형, 인터페이스 참조형` 등이 있음 . `배열 참조형` : 배열 객체를 참조하기 위한 자료형 . `클래스 참조형` : 클래스 객체를 참조하기 위한 자료형 . `인터페이스 참조형` : 자바 언어에서 클래스 외에 인터페이스라는 것을 제공하여주는데, 이러한 인터페이스 객체를 참조하기 위한 자료형 - 특징 . 이들을 조작할 때는 사실 해당 데이터 자체를 직접 조작하는 것이 아니라, . 그에 대한 참조를 조작하는 것임

 

 

 

https://bit.ly/3ilMbIO

 

Java 웹 개발 마스터 올인원 패키지 Online. | 패스트캠퍼스

자바 기초문법부터 프로젝트 실습까지 Java 문법부터 스프링/스프링부트, 트렌디한 기술인 JPA까지 모두 배우는 온라인 강의입니다.

www.fastcampus.co.kr

 

반응형

댓글