어떤 하나의 기능을 구성하는 특정 부분을 실행중에 다른것으로 효과적으로 변경할 수 있는 방안을 제공한다. SumPrinter 클래스의 print 메서드 매개변수를 SumStrategy interface로 넣어 원하는 class를 구현해 변경할 수 있다. [참고자료] : https://victorydntmd.tistory.com/292 - SumPrinter.java public class SumPrinter { void print(SumStrategy strategy, int N){ System.out.printf("The Sum of 1 - %d : ", N); System.out.println(strategy.get(N)); } } - SumStrategy.java public interface Su..
Call by value(값에 의한 호출) 인자로 받은 값을 복사하여 처리를 한다. 장점 : 복사하여 처리하기 때문에 안전하다. 원래의 값이 보존이 된다. 단점 : 복사를 하기 때문에 메모리가 사용량이 늘어난다. Call by reference(참조에 의한 호출) 인자로 받은 값의 주소를 참조하여 직접 값에 영향을 준다. 장점 : 복사하지 않고 직접 참조를 하기에 빠르다. 단점 : 직접 참조를 하기에 원래 값이 영향을 받는다. => 값을 복사를 하여 처리를 하느냐, 아니면 직접 참조를 하느냐 차이 +) 자바는 어디에 해당하는가? Call by Value 예시) swap 메소드 [참고자료] : https://devlog-wjdrbs96.tistory.com/44
클래스 객체를 정의하고 만들어내기 위한 설계도 혹은 틀을 말한다. 클래스 안에는 객체를 만들어내기 위해 필요한 변수와 메서드들이 존재한다. 객체 클래스에 선언된 모양 그대로 생성된 실체를 말하며 '클래스의 인스턴스'라고 부른다. 인스턴스 클래스를 통해서 구현해야할 대상(객체)이 실제로 구현된 구체적인 실체를 말한다. 예시) 붕어빵을 만든다고 상황을 가정해보자. 여기서 클래스는 붕어빵을 만들기 위한 틀이 되고 객체는 붕어빵이다. 그리고 인스턴스는 붕어빵 틀로 찍어낸 각각의 붕어빵이다.
1. Class Loader JVM 내로 클래스 파일을 로드하고, 링크를 통해 배치하는 작업을 수행하는 모듈입니다. 2. Execution Engine 클래스 로더를 통해 JVM 내의 Runtime Data Area에 배치된 바이트 코드들을 명령어 단위로 읽어서 실행합니다. 최초 JVM이 나왔을 당시에는 인터프리터 방식이었기 때문에 속도가 느리다는 단점이 있었지만 JIT 컴파일러 방식을 통해 이점을 보완하였습니다. JIT는 바이트 코드를 어셈블러 같은 네이티브 코드로 바꿈으로써 실행이 빠르지만 역시 변환하는데 비용이 발생하였습니다. 이 같은 이유로 JVM은 모든 코드를 JIT 컴파일러 방식으로 실행하지 않고, 인터프리터 방식을 사용하다가 일정한 기준이 넘어가면 JIT 컴파일러 방식으로 실행합니다. 3. ..
SRP - 단일책임원칙(Single Responseibility principle) 쉽게 말하면 하나의 클래스에 역할과 책임을 너무 많이 주지 말라는 것이다. 클래스에 모든 기능을 다 때려넣지 말고 목적과 취지에 맞게 속성과 Method를 구성함으로 관련된 책임만 주어야한다. OCP - 개방폐쇄원칙(Open/Closed principle) 자신의 확장에는 열려있어야 하며, 주변의 변화에 대해서는 닫혀 있어야 한다. LSP - 리스코프 치환 원칙(Liskov substitution principle) 하위 클래스의 인스턴스는 상위 클래스의 인스턴스 역할을 하는대 문제가 없어야 한다. 하위 클래스가 상위 클래스의 역할을 대신할 때 논리적으로 맞아 떨어져야한다. 아버지와 아들 -> 틀림 포유류와 고래 -> 맞..
1. 추상화(Abstracition) - 공통의 속성이나 기능을 묶어 이름을 붙이는 것을 추상화라고 할 수 있다. - 객체지향적 관점에서 클래스를 정의하는 것 예시) 사자, 고양이, 강아지를 객체라고 한다면, 객체의 공통점인 동물이라고 표현할 수 있는대 이때 동물로 묶는 행위를 추상화라고한다. 2. 캡슐화(encapsulation) - 특정 객체가 독립적으로 역할을 수행하기 위해 필요한 데이터와 기능을 하나로 묶는 것을 캡슐화라고한다. - 쉽게 말해 모듈화를 의미한다. 이러한 캡슐화를 통해 정보를 객체 안에 포함시키고, 그 정보에 대한 직접 접근은 허용하지 않는 대신, 필요에 따라 확인할 수 있는 인터페이스를 외부에 공개함으로써 정보 은닉 효과도 자연스럽게 따라온다. 3. 상속(inherutance) -..
1. 접근제어자 - 멤버 또는 클래스에 사용되어 해당하는 멤버 또는 클래스를 외부에서 접근하지 못하도록 제한하는 역할 - 생략가능하며 생략했을 때는 자동으로 default 임을 뜻한다. - 접근제어자가 사용될 수 있는 곳 : 클래스, 멤버변수, 메서드, 생성자 1) private : 같은 클래스 내에서만 접근 가능 2) default : 같은 패키지 내에서만 접근 가능 3) protected : 같은 패키지 내에서, 그리고 다른 패키지의 자손 클래스에서 접근 가능 4) public : 접근 제한이 전혀 없다. 접근자 클래스내부 패키지 상속받은 클래스 전체 public O O O O protected O O O X default O O X X private O X X X - 접근 범위 : private