♪ 학습 내용 객체 지향 설계 원칙 SOLID / 스프링 프레임 워크의 필요성 * SOLID 좋은 객체 지향 설계의 5가지 원칙 - SRP : 단일 책임 원칙 - OCP : 개방 - 폐쇄 원칙 ★ - LSP : 리스코프 치환 원칙 - ISP : 인터페이스 분리 원칙 - DIP : 의존관계 역전 원칙 ★ * SRP 단일 책임 원칙 한 클래스는 하나의 책임을 가져야 한다. 그 기준은 ? 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것이다 하나의 책임 이라는 범위를 적절하게 잘 조절하는게 객체 지향 설계의 묘미 * OCP 개방-폐쇄 원칙 ★ 확장에는 열려있고 변경에는 닫혀 있어야한다. 다형성을 활용해 보면 (역할과 구현의 분리를 생각) public class Driving{ private C..
♪ 학습 내용 스프링과 객체 지향의 다형성 * 스프링 스프링이라는 단어는 문맥에 따라 다르게 사용되는데, 통상 스프링이라 하면 스프링 부트, 스프링 프레임워크를 포함해서를 말한다. 무언가를 진정 내 것으로 하기 위해서는 핵심 개념과 왜 사용하는 지를 알아야한다. * 스프링의 핵심 스프링은 자바 언어 기반 자바는 대표적 객체 지향 언어 스프링은 객체 지향 프로그램을 잘할 수 있게 도와주는 도구이다. 그렇다면 좋은 객체 지향 프로그램이란 과연 무엇일까 ? * 객체 지향 프로그래밍 - 객체들의 모임 - 각 객체들은 메세지를 주고받고 데이터를 처리한다.(협력) - 유연하고 변경이 용이 ( = 객체지향의 다형성) 다형성을 실세계에 비유하려면 세계를 '역할'과 '구현'으로 구분해야한다. ex) 운전자 역할과 자동차..
블로그에 작성해오지는 않았지만, 짧굵배 JSP 웹프로그래밍에서 스프링까지 간단하게 만져본 뒤에 인프런에 김영한님의 Spring 입문 강의를 처음부터 들었다. 솔직히 말하면 너무 많은 내용을 짧은 시간안에 영상으로 접한 것이라 뭘 배운 거 같진 않았다 그래도 강의 목적 자체가 뭘 배우기보단, Spring을 어떻게 사용하는지 전체적으로 얕게 보여준 것이라 강의 목적으로만 보면 괜찮았다. 앞으로는 김영한님의 Spring 완전 정복 로드맵을 따라가며 공부를 할 것이다. 다음으로 공부할 부분은 Spring 핵심 원리 - 기본 이다.
인터페이스란 객체의 사용 방법을 정의한 타입이다. 인터페이스를 두는 이유는 개발 코드를 수정하지 않고, 사용하는 객체를 중간에 변경할 수 있도록 하기 위해서이다. 즉, 하나의 객체가 아니라 여러 객체들과 사용이 가능하므로 어떤 객체를 사용하느냐에 따라 다양한 결과값을 가진다. public interface RemoteControl{} //RemoteControl이라는 인터페이스 선언 일반 클래스는 필드 / 생성자 / 메서드를 멤버로 가지지만, 인터페이스는 상수 / 메서드만을 가진다. public interface GameRule{ //상수 int time= 30; public static final int player = 2; //추상 메서드 void gameSetting(//매개변수); //디폴트 메서..
객체를 직접 생성할 수 있는 클래스를 실체 클래스라고 한다면, 이 실체 클래스들의 공통적인 특성을 추출해 선언한 클래스를 추상 클래스 라고 한다. 추상 클래스와 실체 클래스는 상속의 관계에 있어, 실체 클래스는 추상 클래스의 모든 특성을 물려받는다. 추상 클래스는 실체 클래스들을 추출해서 만들었기 때문에 직접 객체를 생성하지 못한다. 즉 , new( ) 연산자를 사용할 수 없다. 추상 클래스의 용도는 다음과 같다. 실체 클래스의 필드와 메소드의 이름을 통일화 시간 절약(추상 클래스로 설계 규격을 만들고, 상속해서 구체적인 클래스를 만들도록 지시함으로써) 추상 클래스는 abstract 키워드를 붙여 선언한다. public abstract class Animal{ public String name; publ..
다형성이란 같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질을 말한다. 다형성을 통하면 하나의 타입에 여러 객체를 대입함으로써 다양한 기능을 이용할 수 있다. 자바에서는 다형성을 위해 부모 타입에 모든 자식 객체가 대입될 수 있게 한다. public class PhoneTest{ Phone phone1 = new IPhone(); Phone phone2 = new SPhone();//자식 객체가 부모의 타입인 Phone에 대입되었다. } 자동 타입 변환은 프로그램 실행 도중에 자동적으로 타입 변환이 일어나는 것을 말한다. 자식은 부모의 특징과 기능을 상속받기 때문에 부모와 동일하게 취급될 수 있다는 것이 바로 자동 타입 변환의 개념이다. public class Animal{ } public..
접근 제한자에는 public , protected, default, private 이렇게 4 가지가 있다. public 클래스, 필드, 생성자, 메서드를 선언할 때 public을 붙이면 public 접근 제한을 가진다. public 접근 제한을 가지게 되면 같은 패키지 내에서 뿐만 아니라 외부 패키지에서도 사용할 수 있다. default 클래스, 필드, 생성자, 메서드를 선언할 때 public을 생략한다면, default 접근 제한을 가진다. default 접근 제한을 가지게 되면 같은 패키지 내에서만 사용할 수 있다. protected protected 제한자는 public과 default 접근 제한의 중간쯤에 해당된다. 같은 패키지 내에서는 접근 제한이 없지만, 외부 패키지에서는 자식 클래스만 접근을..
final 키워드는 클래스, 필드 , 메서드 선언 시에 사용할 수 있다. 필드 선언 시에 final을 붙이면 초기값으로 설정되어, 더 이상 수정할 수 없다는 것을 앞에서 확인 했었다.(like 상수) 그러면 만약 final 키워드를 클래스와 메서드 선언 시에 붙이면 어떻게 될까? public final class String{ ... } String 클래스는 자바 표준 api에서 제공하는 대표적 final 클래스이다. 이처럼 클래스를 선언할 때 final을 붙이면 이 클래스는 최종적인 클래스로 되어서 상속을 할 수가 없다. 따라서 final 클래스는 상속을 하지 못하므로 , 자식 클래스도 없고 부모 클래스도 아니다. public final class Food extends{//Food 클래스는 final..
부모 클래스가 자식 클래스에게 상속 할 때에는 필드 뿐만 아니라 메서드까지 넘겨준다. 만약 부모 클래스의 메서드가 자식 클래스에 맞게끔 설계되어 있지 않다면, 이 메서드를 다시 수정해 줄 필요가 있다. 이러한 경우에 사용하는 것이 바로 메서드 오버라이딩 이다. public class Fruit{ public void introduce(){ System.out.println("I'm fruit"); } } public class Apple extends Fruit{//Fruit의 자식 클래스 Apple public void introduce(){//Fruit의 introduce 메서드를 오버라이딩을 통해 재정의 했다. System.out.println("I'm apple"); } } lFruit은 Appl..
상속 Java에서 상속은 현실에서 부모가 자식에게 물려주는 상속이랑 매우 유사하다. 상송을 통해 부모 클래스의 멤버를 자식 클래스에게 물려줄 수 있다. 클래스를 재사용해서 새로운 클래스를 만들기 때문에 시간과 코드의 중복을 줄여주기 때문에 보다 효율적이다. class Product{ int count; String color; } class CellPhone extends Product{ String name; } CellPhone클래스는 Product 클래스를 상속 받는다. 따라서 CellPhone의 멤버로는 Product클래스의 멤버인 count와 color를 기본적으로 가지면서, 추가적으로 따로 선언해주었기 때문에 name 필드도 가진다. class CellPhone extends Product, ..