본문 바로가기

CS/OOP

(7)
객체지향 프로그래밍 - Singleton Pattern 개념/예제 싱글톤 패턴이란, 객체의 인스턴스가 오직 1개만 생성되는 패턴을 의미한다. 그리고 이 생성된 객체를 프로그램 어디서나 접근하여 사용할 수 있는 패턴이다. 여러개의 인스턴스를 생성하지 않고 위험한 전역변수를 사용하지 않고도 전역적인 접근이 가능한 객체를 생성할 수 있다. 싱글톤 패턴을 사용하는 이유 1. 자원의 낭비를 막는다. 2. 전역 변수의 오용을 막는다. 전역변수는 어디서든 접근할 수 있다. 3. 동기화 문제를 해결한다. 단점 1. 커플링이 높아져 객체지향을 해칠수있다. 2. 테스트하기 어렵다. 싱글톤 패턴의 3가지 스텝 1. 생성자를 private로 선언 2. 클래스 내부에서 유일한 인스턴스 생성 private static 3. 유일한 인스턴스에 접근할 수 있는 메서드 제공 그렇다면, 전역변수와 싱..
객체지향 프로그래밍 - 상속 (java) 상속받은 자식 : 부모의 메소드 + 변수 상속의 장점 : 코드의 재사용, 유지성 향상 부모가 수정되면 자식도 수정된 방식을 따를 수 있음 자바는 다중 상속을 지원하지 않는다. 부모는 1개 . 자식을 생성할 경우 부모의 생성자는 자동으로 실행된다. 우리는 부모의 생성 파라미터가 있다면 그것도 충족해줘야한다. 메소드 오버라이딩 : 부모의 메소드를 자식에서 새로 정의 메소드 오버로딩 : 같은 클래스에서 같은 이름이지만 다른 파라미터를 받을 수 있음 오버라이딩시 선언이 자식 클래스이면 자식의 메소드를 따름. final 클래스는 자식을 가질 수 없음 protected : 자식 클래스에서만 접근할 수 있는 변수 같은 패키지에서는 접근이 가능
객체지향 프로그래밍 - Object, Class classname name = new classname() -> new 연산자는 클래스의 생성자를 call, name은 포인터로 classname으로 만들어진 객체를 가리킨다. 새로운 object가 생성된다. 각 자바 클래스당 메인은 한개 Main는 실행 클래스 아닌 다른 클래스는 모두 라이브러리 클래스로 불린다. Member in Class - 변수 - 메소드(function) - 생성자(Constructor) Local variable , public variable - 지역변수 : 오브젝트 종속 변수 - 필드 : 오브젝트(클래스)에 선언되어있는 변수 Overloading - 오버로딩은 같은 이름의 메소드인데 다른 파라미터를 받을 수 있는 방법이다. 이는 생성자, 메소드 모두 가능하다. 이는 다형성이..
객체지향 프로그래밍 - 집합관계 : 완성품과 부품의 관계 ex) 자동차 , 엔진, 타이어 - 사용관계(의존성) : Object를 사용하는 주체 - 상속 : 부모와 자식, 자식은 부모의 속성을 갖는다. 상속은 코드의 재사용을 가능하게 한다. 코드의 유지보수 시간을 줄일 수있다. - 캡슐화 : 메소드와 변수를 바인딩. 사용자는 어떻게 작동하는지 알 필요가 없다. - 다형성 : 오버로딩, 오버라이딩을 이야기함. 오버로딩은 같은 이름의 받는 파라미터가 다름, 오버라이딩은 "부모"의 메소드를 변형하여 사용하는 것이다. 파라미터 타입과 함수 타입도 동일해야한다. - 클래스와 오브젝트 : 클래스는 설계도 오브젝트는 그 설계도로 만든 실제 구현물을 이야기한다. 오브젝트는 실제로 구현할 수 있는 모델을 뜻한다. ex) 자동차 그리고 인스턴..
C/C++ 포인터와 참조 : 화살표 -> 과 점 . 의 차이 C/C++에서 포인터를 쓰다보면 Ver.a()라고 쓰려 하면 IDE가 Ver -> a()로 바꿔주는 경우가 있다. 신경쓰지 않을 수도 있지만 뭐가 다른걸까? 간단히 말하면 -> 는 간접 . 는 직접이라고 볼 수 있다. 아래 코드를 보자 #include using namespace std; class Rect { int width, height; public: Rect(int x, int y) : width(x), height(y) {} int area() { return width * height; } }; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL);cout.tie(NULL); Rect obj(3, 4); Rect* foo, * bar, ..
C++ : In-line function 이란 무엇인가 In-line fucntion이란 마치 C/C++의 매크로처럼 함수를 In-line 라인 안에 숨긴다는 뜻이다. 예를 들어 void add(int a, int b){ return a + b; } main(){ cout add -> 연산 -> 출력 순이다. 만약 inline을 쓰면? inline void add(int a, int b){ return a + b; } main(){ cout 연산 -> 출력 순이된다. 이미 컴파일러는 인라인함수 때문에 저 함수 자체를 알고 있는 상태이기 때문이다. 우리가 어떤 수학 공식을 알면 문제에서 바로 적용 가능하지만 그 공식의 이름만 안다면 책에서 찾아보고 써야하는 것과 같다. inline은 함수를 컴파일러에게 외우게 하는 것이다. 때문에 inline은 함수의 실행시간..
OOP 기초 (왜 쓰는가?, 캡슐화 등) 1. 소프트웨어공학의 궁극적 목표는 최소한의 비용으로 소프트웨어의 개발, 유지보수를 하는 것이다. 2. 일반적으로 OOP는 프로그래머의 생산성, SW퀄리티, 생명주기, 가독성, 이해력을 증가시킨다. 3. 커플링은 모듈(컴포넌트)간의 의존성을 나타낸다. 일반적으로 커플링은 최소화 해야한다. 4. 응집도는 모듈 내부의 데이터들이 얼마나 하나의 목표를 위해 긴밀한가를 나타낸다. 응집도는 최대화 해야한다. 5. 추상 클래스는 최소 한개의 추상메소드를 포함해야한다. 6. 캡슐화란? 7. 캡슐화를 할때의 장점은 무엇인가? 8. 그냥 인스턴스를 사용할때와 포인터를 사용할 때의 차이는? 일반 인스턴스는 값의 복사값을 콜리에게 주기 때문에 데이터가 안전하다. 포인터를 사용할 경우는 본래의 값이 변경 될 수 있다.