Programming Language 71

[Java] 07. OOP - 상속과 접근제어자

상속과 접근제어자상속(inheritance)기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것class 이름 뒤에 상속받고자 하는 클래스의 이름을 키워드 'extends'와 함께 써 주기만 하면 된다class Child extends Parent { // ...}조상 클래스 : 상속해주는 클래스 (a.k.a 부모, 상위(super), 기반(base) 클래스)자손 클래스 : 상속 받는 클래스 (a.k.a 자식, 하위(sub), 파생된(derived) 클래스)생성자와 초기화 블럭은 상속되지 않음. 멤버만 상속됨자손 클래스의 멤버 개수는 조상 클래스보다 항상 같거나 많다class Tv { boolean power; // 전원상태(on/off) int channel; // 채널 void power() ..

[Java] 06. OOP - 클래스와 객체

클래스와 객체클래스와 객체의 정의클래스의 정의 : 객체를 정의해 놓은 것클래스의 용도 : 객체를 생성하는데 사용된다객체와 인스턴스클래스의 인스턴스화(instantiate) : 클래스로부터 객체를 만드는 과정인스턴스 : 어떤 클래스로부터 만들어진 객체ex) Tv클래스로부터 만들어진 객체를 Tv클래스의 인스턴스라고 함인스턴스의 생성과 사용클래스명 변수명; // 참조변수 선언변수명 = new 클래스명();Tv t;t = new Tv();객체 배열객체 배열을 다루기 위한 참조 변수 배열을 생성객체를 생성해서 배열의 각 요소에 저장Tv[] tvArr = new Tv[3]; // 참조변수 배열을 생성// 객체를 생성해서 배열의 각 요소에 저장tvArr[0] = new Tv();tvArr[1] = new Tv();t..

[Java] 05. 배열

배열배열 생성 방법타입[] 변수이름 = new 타입[길이]길이가 0인 배열을 생성할 수 있다JVM이 모든 배열의 길이를 별도로 관리하고, '배열이름.length'를 통해서 배열의 길이에 대한 정보를 얻을 수 있다.배열은 한 번 생성하면 길이를 변경할 수 없다.공간이 부족해 배열의 길이를 변경해야 하는 경우 더 큰 길이의 새로운 배열을 생성한 다음 기존 배열의 값을 새로운 배열에 복사한다유효한 인덱스 범위를 넘어서면 ArrayIndexOutOfBoundsException이라는 예외가 발생한다코드를 변경해 배열의 길이가 바뀔 때, '배열이름.length'는 for문에서 알아서 값을 update 해준다.배열의 초기화배열 생성과 동시에 자동적으로 자신의 타입에 해당하는 기본값으로 초기화 됨선언과 생성을 동시에 ..

[Java] 04. 변수

변수 단 하나의 값을 저장할 수 잇는 메모리 공간 지역변수는 사용되기 전에 초기화를 반드시 해야 함 클래스변수와 인스턴스변수는 초기화를 생략할 수 있다 변수의 명명규칙 변수의 이름처럼 프로그래밍에서 사용되는 모든 이름을 '식별자(identifier)'라고 함 식별자는 같은 영역 내에서 서로 구분(식별)될 수 있어야 한다. 식별자를 만들 때는 다음과 같은 규칙을 지켜야 함 대소문자가 구분되며 길이에 제한이 없다 예약어(a.k.a. keyword, reserved word)를 사용해서는 안 된다(ex. true는 불가능, True는 가능) 클래스나 변수, 메서드의 이름으로 예약어를 사용할 수 없다 숫자로 시작해서는 안 된다 특수문자는 '_'와 '$' 만을 허용한다 ..

[Java] 03. 화면에서 입력받기

화면에서 입력받기 화면에서 입력받기 - Scanner import java.util.* // Scanner클래스를 사용하기 위해 import Scanner scanner = new Scanner(System.in); // Scanner 클래스의 객체를 생성 nextLine()이나 nextInt(), nextFloat()를 이용하기 String input = scanner.nextLine(); // 입력받은 내용을 input에 저장 int num = Integer.parseInt(input); // 입력받은 내용을 int타입의 값으로 변환 // float의 경우 Float.parseFloat() 사용 int num2 = scanner.nextInt(); // 정수를 입력받아 변수 num에 저장 예제 imp..

[C++] 동적할당

동적할당(Dynamic allocation) 동적할당(Dynamic allocation)이란 동적으로 할당되지 않은 변수의 경우 지역변수 : 지역변수가 속한 함수가 시작할 때 생성되고, 종료되면 소멸됨 전역변수 : 프로그램 시작과 동시에 생성되고, 종료되면 소멸됨 동적 할당 dynamic allocation : 프로그램 실행 중에 변수를 메모리에 할당하는 것 변수 동적할당 int main(void) { // int a = int(5); int *a = new int(5); // new 는 연산자. /* 작동원리: int(5)에서 메모리 상에 인트형을 저장하는 공간이 생겨나 5가 들어감(200번지). new가 이 공간의 주솟값(200번지)을 a에 넘겨줌. */ cout

[C++] 연산자 오버로딩

연산자 오버로딩 연산자 오버로딩이란? 프로그래밍 언어에서 기존에 정의된 연산자를 사용자가 직접 정의한 데이터 타입이나 클래스에 대해 재정의하는 것 메서드 이름 형식 : "(operator)(연산자)" 메서드 이름을 통해 함수를 직접 호출할 필요 없이 연산자 만으로 호출할 수 있다. 다른 클래스에 속하는 객체 간의 연산의 경우에도 가능하다 v1이라는 벡터가 있을 때, v1 * 1.6 은 멤버 연산자를 통해 연산자 오버로딩이 가능 v2이라는 벡터가 있을 때, 1.6 * v1 은 벡터 클래스에 속하지 않는 비멤버 연산자를 통해 연산자 오버로딩이 가능 ex) 벡터의 합을 구할 때 덧셈, 뺄셈, 나눗셈, 곱셈(스칼라)을 사용자가 직접 정의함 class Vector2 { public: // Vector2() : x..

[C++] 멤버 메서드의 활용

멤버 메서드의 활용 멤버 메서드는 선언과 정의를 분리하는 것이 좋음 함수 내에서 다른 함수를 참조 하는 것처럼 멤버 메서드 내에서 다른 메서드를 참조할 수 있기 때문 #include using namespace std; class Vector2 { public: // Vector2() : x(0), y(0) {} Vector2(); // Vector2(float x, float y) : x(x), y(y) {} Vector2(float x, float y); // get함수는 const로 선언하는 것이 좋음 // float GetX() const { return x; } float GetX() const; // float GetY() const { return y; } float GetY() const;..

[C++] 상수형 매개변수와 상수형 메서드

상수형 매개변수와 상수형 메서드 const의 쓰임새 매개변수의 상수화 (모든 함수에서) 메서드의 상수화 (클래스에서 멤버 메서드) 실수 방지에 유용 ex) 은행 계좌 Class #include using namespace std; class Account { public: Account() : money(0) {} Account(int money) : money(money) {} void Deposit(const int d) { // 매개변수 d는 절대 변하면 안되기 때문에 const를 사용한다. // d = money; // 실수(버그) --> const를 사용해서 에러 호출 money += d; cout

[C++] 클래스(Class) (2) - 정적 멤버, 정적 메서드

클래스(Class) (2) - 정적 멤버 정적 멤버 정적 멤버 : 틀에 해당하는 멤버(붕어빵 틀) 동적 멤버 : 객체에 포함되는 멤버. 붕어빵마다 팥의 양이 조금씩 다른 것이 해당 ex) RGB 색상 정보를 저장하는 클래스 #include using namespace std; // 0~1 float R G B class Color { public: Color() : r(0), g(0), b(0) {} Color(float r, float g, float b) : r(r), g(g), b(b) {} float GetR() { return r; } float GetG() { return g; } float GetB() { return b; } private: float r; float g; float b; ..