일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- php 프로그래밍 입문
- C언어
- php 프로그래밍 입문 문제풀이
- 페이코 추천인
- 페이코 친구코드
- 플러터 개발환경 설정
- php 프로그래밍 입문 예제
- php 프로그래밍 입문 3판
- 자바
- 플러터
- 자바 스프링
- 한정 분기
- php 프로그래밍 입문 연습문제
- C
- 최단 경로
- 페이코 초대코드
- php 프로그래밍 입문 솔루션
- Java
- 페이코 추천인코드
- spring
- 배열
- 백준
- php 프로그래밍
- 파이썬
- SWEA
- php
- programmers
- 스프링
- JAVA SPRING
- Flutter
- Today
- Total
목록자바/기본 개념 (11)
ImJay
부모 클래스로부터 상속 받은 자식 객체는 생성자를 어떻게 만들까? public class Child extends Parent { private int x; public Child() { this(0, 0, 0, 0); } public Child(int a, int b, int c, int x) { this.setA(a); this.setB(b); this.setC(c); this.x = x; } } 위와 같은 방법으로 setter를 호출하여 값을 초기화 시켜줄 수 있다. 그러나, 꽤나 비효율적으로 보인다. 우리는 매개변수가 없는 생성자와 부모 클래스를 지칭하는 super로부터 힌트를 얻어 아래와 같은 방법을 사용할 수 있다. public class Child extends Parent { private..
[자바] Is A 상속 Has A 상속과 비교했을 때 Is A 상속은 부모가 자식이 요구하는 것을 완벽하게 갖고 있진 않다는 것이다. Is A 상속은 한 캡슐이 내가 만들고자 하는 캡슐에서 필요한 부분들이 상당 부분 있을 때, develop247.tistory.com 앞서 한 이야기에서 우리가 해결하지 못한 문제가 있다. Is A 상속을 통해 기존에 있던 객체에 우리가 원하는 변수를 추가하여 새로운 객체를 완성했는데, 기존 객체의 메소드에서는 우리가 새롭게 추가한 변수에 대한 고려가 되어있지 않다는 점이다. 우리는 이 문제를 어떻게 해결할 수 있을까? 우선 어떤 식으로 메모리가 우선 할당되는지 이해가 필요하다. 우리는 기존 객체 Parent 와 Parent 를 Is A 상속하는 Child 객체를 갖고 있..
Has A 상속과 비교했을 때 Is A 상속은 부모가 자식이 요구하는 것을 완벽하게 갖고 있진 않다는 것이다. Is A 상속은 한 캡슐이 내가 만들고자 하는 캡슐에서 필요한 부분들이 상당 부분 있을 때, 그 캡슐을 상속하여 필요한 부분들을 가져다 쓴다는 개념으로 이해하면 쉽다. 대표적인 Is A 상속에는 프레임워크가 있다. 프레임워크를 통해 Is A 상속을 하여 내가 원하는 부분을 상속함으로써 작업 속도를 향상하고, 작업량을 줄일 수 있다. 장점은 생산성이 좋다는 것이지만, 단점으로는 기성품으로 생각될 수 있다는 점이다. 거의 모든 부분을 가져다 쓰기 때문이다. 그러나 현재 IT는 굉장히 빠른 속도로 성장하고 있기 때문에 대다수 현업자들이 프레임워크를 선호하고, 일부분을 나의 아이디어로 차별화시키는 전략..
한 캡슐이 다른 캡슐의 객체를 가지고 있는 상태를 Has A 상속이라고 한다. Has A 상속은 두가지로 구분할 수 있다. 부모는 자식을 항상 사용하기 때문에, Has A 는 영구적인 성질을 띈다. Composition Has A : 부모가 생성되면 자식의 객체도 모두 생성된다. Aggregation Has A : 부모가 생성되어도 자식의 객체가 모두 생성되는게 아니라, 하나하나씩 구성해나간다. dependency 는 의존객체로, 일시적으로 사용하는 관계이다.
계산기 프로그램을 만든다고 생각해보자. 프로그램은 기본적으로 1. 값을 입력한다. 2. 원하는 연산을 선택한다. 3. 선택한 연산에 따른 알고리즘을 실행한다. 4. 연산 결과를 출력한다. 위와 같은 형태로 동작할 것이다. 그렇다면, 우리가 만든 프로그램의 플랫폼이 확장된다고 생각해보자. 처음엔 웹에서 동작하는 것을 목표로 했던 프로그램이, 단일적인 설치 프로그램을 목표로 한다고 하면 여러 언어들 중 마음에 드는 GUI 디자인 또는 기능을 선택하여 구현할 것이다. 기존에 웹을 기준으로 작성했던 코드들을 전부 다시 작성해야 할 것이다. 상당히 귀찮다. 이런 경우 활용할 수 있는 것이 코드의 재사용이다. 우리가 만든 계산기 프로그램의 연산 알고리즘(3)은 계속 재사용할 수 있다. 입출력(1, 2, 4)만 사용..
Getters 서로 다른 객체 A, B 가 있다고 가정하자. public class A { B B = new B(); int x = B.x; } public class B { int x; } 객체 A 는 객체 B 의 변수 x 를 참조하고 있다. 여기서, 객체 B의 x 변수명을 x1 로 수정한다면? 객체 A는 x1 를 사용할 수 없을 것이고, 이는 캡슐화가 제대로 이루어지지 않았다고 할 수 있다. 그렇다면 여기서 getter를 사용해보자. public class A { B B = new B(); int x = B.getX(); } public class B { int x1; public int getX() { return x1; } } 객체 B의 x 변수명이 x1 으로 수정되어도 객체 A는 아무런 영향 없..
생성자(Constructor)는 함수의 특징을 갖고 있기 때문에, 오버로드 또한 가능하다. public Exam() { x = new List[5]; } public Exam(int size) { x = new List[size]; } Exam 객체에서 변수 x의 배열의 크기를 기본 3으로 초기화하고 있다. 하지만 x 배열의 크기를 임의로 지정해주고 싶을 때, 정수 값을 넣어 선언해주면 된다. 이럴 경우 두 개의 생성자를 사용하게 된다. 위의 예제와 같이 필요에 따라서 여러개의 생성자를 사용할 수 있다. 이를 생성자 오버로드(Constructor Overload)라고 한다. 생성자 오버로드를 사용할 땐 중복된 부분을 제거할 수 있어야한다. 생성자 코드 중복을 제거하는 방법은 다음과 같다. public E..
생성자는 클래스 내에서 사용하는 변수들을 모두 모아 한번에 선언하고, 초기화해주는 함수이다. 생성자의 조건 1. 객체가 생성되자마자 무조건 제일 먼저 실행돼야 한다. 2. 생성될 때 단 한번만 실행돼야 한다. 생성자는 함수명이 없다. 즉, 정의할 때의 함수명은 초기화 할 객체를 한정하기 위한 형식명칭이다. class Exam { public Exam(){ x = 0; y = 0; } }
캡슐화가 깨지지 않기 위해서는 정보의 은닉화가 필요하다. 만약 클래스 A 에 변수 x 가 있다고 가정하자. 은닉화가 이루어지지 않았다면, 클래스 A가 아닌 어느 곳에서든 변수 x를 사용할 수 있다. 이렇게 된다면 캡슐화가 깨지게 된다. 캡슐화를 깨트리지 않기 위해, 정보의 은닉화가 필요한 것이다. 이를 위해서 private, public 을 사용한다. 클래스 A 내에 변수 x를 선언할 때, 앞에 private 를 붙이면 클래스 A를 제외한 어느 곳에서도 변수 x를 호출하여 사용할 수 없다. 그러나 public 을 사용하면 어디서든 변수 x를 호출하여 사용할 수 있다. 따라서, 통상적으로 우리가 서비스를 제공하는 함수들은 public 으로 선언해주고, 캡슐화를 지켜야하는 변수들에는 private 를 사용해..
Exam 이라는 클래스에서 선언되어있는 여러가지 함수를 사용하고 싶다고 가정해보자. x = new Exam(); Exam.input(x); Exam.print(x); ... 우리가 앞서 배웠던 객체지향의 캡슐화를 유지하기 위해서는 Exam의 함수들을 위와 같은 방식으로 호출해야 한다. 하지만, 인스턴스 함수를 사용하면 x = new Exam(); x.input(); x.print(); ... 위와 같은 방식으로 간단하게 호출이 가능하다. 단순하게 코드를 줄인다는 개념이 아니라, 변수 x 에게 책임을 부여한다고 생각하면 편하다. 전자의 코드에서는 우리가 직접 x라는 매개체를 통해 함수를 호출했다고 한다면, 후자의 코드에서는 우리가 만든 x라는 매개체가 직접 함수를 호출하는 것이다. 전자의 코드는 스태틱 메..