분류 전체보기 252

동적 메모리 할당 및 반환

동적 메모리 할당 및 반환 1. 동적 메모리 할당 일반적으로 개발자는 프로그램 작성 단계에서 필요한 메모리를 확보하기 위해 변수, 객체, 배열을 정적으로 선언한다. 하지만, 문서 편집기나 그래픽 편집기를 개발하는 경우, 몇 줄의 텍스트를 입력할 것인지, 몇 개의 도형을 그릴 것인지 사용자의 마음에 달려 있기 때문에, 필요한 메모리를 프로그램을 작성하는 단계에서 모두 선언을 하는 것은 불가능하다고 할 수 있다. 물론, 크기가 작은 프로그램의 경우 가능할 수는 있겠지만, 프로그래머가 언제나 크기가 작은 프로그램만 만들지는 않을 뿐더러, C 프로그래밍을 해본 사람들은 알겠지만 포인터를 사용하다보면 동적 할당이 반드시 필요한 상황들이 생기고는 한다. 그렇기에, C++에서는 동적으로 메모리를 할당하고, 다 쓰고나..

C++/C++ 기본 2018.07.16

자바에서 객체의 타입을 확인하는 법

자바에서 객체의 타입을 확인하는 법 자바로 코딩을 하다보면 각 객체들의 타입을 체크해야만 할 때가 있다. 그럴 때에 사용하는 것이 바로 instanceof 연산자이다. instanceof 연산자의 구문은 다음과 같다:객체_레퍼런스 instanceof 클래스_타입 instanceof는 이항 연산자로서 주어진 레퍼런스 변수가 가리키는 객체가 주어진 클래스의 타입인지 확인을 한 후, 그 결과에 해당하는 boolean을 반환한다. i.e.class Person {}class Student extends Person {}class Researcher extends Person {}class Professor extends Researcher {} public class InstanceofExample { publ..

Java/Java 기본 2018.07.09

객체의 타입 변환 : 업캐스팅과 다운캐스팅

객체의 타입 변환 : 업캐스팅과 다운캐스팅 캐스팅(casting)이란 개발자가 프로그램 코드로 행하는 강제 타입 변환이다. 자바에서 캐스팅은 업캐스팅과 다운캐스팅의 두 가지가 있다. 1. 업캐스팅(upcasting) - 서브 클래스의 레퍼런스를 슈퍼 클래스 레퍼런스에 대입- 슈퍼 클래스 레퍼런스로 서브 클래스 객체를 가리키게 되는 현상 서브 클래스는 슈퍼 클래스의 모든 특성을 상속받는다. 따라서 서브 클래스는 슈퍼 클래스로 취급될 수 있다. 예를 들면, 사람을 생물이라고 불러도 되는 것과 같다.서브 클래스 객체가 슈퍼 클래스 타입으로 변환되는 것을 업캐스팅(upcasting)이라고 한다. i.e.class Person {String name;String id; public Person(String nam..

Java/Java 기본 2018.07.09

라즈베리 파이 ip 주소 찾기

라즈베리 파이 ip 주소 찾기 ssh를 이용해서 라즈베리 파이에 접속을 하려 하다보면, 라즈베리 파이의 ip 주소를 몰라서 연결을 못하는 경우가 많다. 그러한 분들을 위해서 라즈베리 파이의 아이피 주소를 찾는 방법에 대해서 설명을 하도록 하겠다. 우선, 흔히들 라즈베리 파이에 설치하는 운영체제 "라즈비안"은 유닉스 계열의 운영체제이다.따라서, 리눅스나 맥북 등과 마찬가지로 터미널에 가서 "ifconfig" 커멘드를 입력하면 된다. 이 커멘드를 입력하고 나면 다음과 같은 결과가 출력된다. 여기서 "inet" 혹은 "inet addr"라고 쓰여진 부분 옆에 있는 주소가 바로 라즈베리 파이의 아이피 주소이다. 이 아이피 주소를 이용해서 ssh 연결을 하면 된다. 참고로, 라즈베리 파이의 기본 사용자 이름은 "..

IoT 2018.07.09

다차원 객체 배열

다차원 객체 배열 C++에서는 2차원, 3차원 등 다차원 객체 배열을 만들 수 있다. 예를 들어 2행 3열의 2차원 객체 배열은 다음과 같이 선언한다. i.e.Circle circles[2][3]; //2행 3열의 2차원 객체 배열 생성 2차원 배열도 일차원 배열과 동일하게, 각 원소 객체가 생성될 때 기본 생성자 Circle()이 실행된다. 또한, 2차원 배열도 1차원 배열처럼 []를 사용해서 원하는 원소에 접근한다. 다만, 2차원 배열의 경우에는 []를 2개 사용한다. i.e.circles[0][0].setRadius(1);circles[0][1].setRadius(2);circles[0][2].setRadius(3);circles[1][0].setRadius(4);circles[1][1].setRa..

C++/C++ 기본 2018.07.07

객체 배열

객체 배열 1. 객체 배열 선언 및 활용 C++에서 객체의 배열을 선언하는 방법을 알아보자. 객체 배열은 원소가 객체라는 점을 빼고, int, char 등 기본 타입의 배열을 선언하고 활용하는 방법과 동일하다. 다음 예제 코드를 보도록 하자. i.e.#include using namespace std; class Circle {int radius;public:Circle() { radius = 1; } //클래스 선언부에서 구현 -> 컴파일 시에 인라인 함수로 변환Circle(int r) { radius = r; }void setRadius(int r) { radius = r; }double getArea();}; double Circle::getArea() {return 3.14 * radius * r..

C++/C++ 기본 2018.07.07

객체 포인터

객체 포인터 C++에서 객체를 다루기 위해 객체에 대한 포인터 변수를 선언하고, 이 포인터 변수로 객체의 멤버 변수를 읽고 값을 쓰거나 멤버 함수를 호출할 수 있다. - 객체에 대한 포인터 변수 선언 Circle 타입의 객체에 대한 포인터 변수 p는 다음과 같이 선언한다. i.eCircle *p; 선언된 포인터 변수 p는 현재 아무 객체도 가리키고 있지 않다. - 포인터 변수에 객체 주소 지정 객체의 주소는 객체 이름 앞에 & 연산자를 사용하여 표현한다. 포인터 변수 p에 donut 객체의 주소를 저장하는 코드는 다음과 같다. i.e.Circle donut;p = &donut; //p에 donut 객체의 조수 저장 포인터 변수를 선언할 때 다음과 같이 객체의 주소로 초기화할 수도 있다. i.e.Circl..

C++/C++ 기본 2018.07.07

바람직한 C++ 프로그램 작성법

바람직한 C++ 프로그램 작성법 C++ 프로그램은 여러 클래스들과 전역 함수들로 구성된다. 이들은 하나의 C++ 소스 팡일로 작성할 수도 있고 여러 소스 팡일로 자줄 수도 있다. 지금부터 바람직한 C++ 프로그램의 작성에 대해 알아보자. 1. 헤더 파일과 cpp 파일 분리 C++ 프로그램의 소스 코드는 다음과 같은 원칙으로 분리하여 작성하는 것이 바람직하다. - 클래스마다 선언부는 헤더 파일에, 구현부는 cpp 파일에 분리하여 작성한다.- main() 등 함수나 전역 변수는 한 개 이상의 cpp 파일에 나누어 작성한다. 클래스마다 클래스의 선언부와 구현부를 헤더 파일과 cpp 소스 파일로 분리하면 저체 프로그램을 관리하기 쉽고 클래스를 재사용하기 쉽기 때문이다. 클래스를 활용하는 코드들은 클래스에 대한 ..

C++/C++ 기본 2018.07.07

C++ 구조체

C++ 구조체 1. C++ 구조체 선언 C++에서는 C 언어와의 호환성을 위해 구조체(struct)를 지원한다. C++ 구조체는 표준 C 구조체에 기능을 확장하여 클래스와 동일한 구조와 기능을 가진다. C++ 구조체는 struct 키워드로 선언하며, 멤버 변수와 멤버 변수와 멤버 함수를 가지고, 접근 지정도 해야 한다. struct structName {//디폴트 접근 지정은 public이다. public 속성의 멤버 변수나 멤버 함수 선언private://private 속성의 멤버 변수나 멤버 함수 선언public://public 속성의 멤버 변수나 멤버 함수 선언protected://protected 속성의 멤버 변수나 멤버 함수 선언}; 2. C++ 구조체의 객체 생성 C++ 구조체의 객체 생성은 ..

C++/C++ 기본 2018.07.07

인라인 함수

인라인 함수 1. 함수 호출에 따른 시간 오버헤드 함수는 초기 컴퓨터 언어의 발달사에서 획기적인 발명품이었다. 적절한 단위 작업을 하나의 함수로 작성하여 두고 필요할 때마다 호출하여 실행할 수 있으므로, 함수는 프로그램을 구성하는 빌딩 블록(building block)의 역할을 하여 왔다. 개발자들은 늘 프로그램 코드를 어떻게 쪼개서 함수들로 만들지 궁리한다. 그러나 함수의 호출에는 대가가 따른다. 함수 호출과 실행을 마치고 돌아오는 과정에서 시간 소모가 발생한다. 함수 호출 오버헤드(overhead) 시간이 무시할 수 없는 비중을 파지하는 경우도 있다. 다음 예제 코드의 경우 1에서 10000까지 루프를 돌면서 홀수 합을 구하는 코드로서, 함수 호출에 따른 시간 오버헤드의 심각성을 보여준다. i.e.#..

C++/C++ 기본 2018.07.07