전체 글

·CS
시작은 Dependency( 의존관계 )로 출발한다. 대충 알고 있을 테니 간단히만 설명하면 ,B가 변했는데 그 변화가 A에게 영향을 줄 때 이를 Dependency가 있다고 하며, A가 B에 의존적이다 라고도 한다. 그럼 DI( Dependency Injection )는? 의존관계인 A,B간에 A에서 B를 직접 생성해서 사용하는게 아니라 , 외부에서 B를 생성해서 주입해준다는 것이다. 다음은 사용시 장점이다 의존성이 줄어든다. = 결합도가 낮아진다. 기존에는 직접 생성하는 부분 때문에 B를 수정할 때 A의 구현 자체를 수정해야 하지만 , 외부에서 주입하면 B를 수정해도 A의 구현 자체를 수정할 일이 없거나 줄어들게 된다. 의존성이 낮아지면 다른 데에다 사용해도 문제가 발생할 가능성이 낮아지니까 코드의 ..
·에러
깃헙 계정을 새로 파고 저장소를 만들었다. 소스코드 작성 후 터미널로 깃헙 온라인 저장소에 푸시할려고 하는데 에러(remote repository not found.)가 뜬다. 뜻은 입력한 온라인 저장소를 못 찾았다는 뜻인데 , 왜 못 찾나 했더니 pc에 등록된 일반 자격 증명 중 git:https://github.com 증명에 이전에 사용했던 아이디가 등록되어 있었다. 그래서 현재 계정이 아니라 예전 계정에서 저장소를 찾고 있었다. 해결방법 윈도우의 경우 여기서 git:https://github.com 부분을 편집해주면 된다. 아니면 제거하고 명령어 다시 실행하면 온라인으로 로그인해달라며 알아서 브라우저를 켜준다. 그럼 로그인 해주면 해결된다.
·CS
어노테이션 ( @ ) 이란 주석이란 뜻을 가진 단어지만 , 자바에서는 소스코드에 '@'예약어를 추가해서 사용할 수 있는 메타 데이터의 일종이다. 그럼 메타데이터란? 애플리케이션이 처리해야 할 데이터가 아니라 , 컴파일 과정과 실행 과정에서 코드를 어떻게 처리해야 하는지를 알려주기 위한 추가정보다. 쉽게 말하면 데이터로 된 사용설명서? 같은 거다 어노테이션의 기능 컴파일시 : 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보 제공 빌드시 : 소프트웨어 개발 환경이 빌드나 배포시 코드를 자동으로 생성할 수 있도록 정보 제공 실행시 : 런타임시에 특정 기능을 실행하도록 정보 제공 자바에서는 미리 정해져 있는 여러 어노테이션( 예를 들어 @Override )들이 있지만 개발자가 커스텀,생성해서 사용할 수도 있다.
·CS
오버라이드란 부모클래스에게 상속받은 메소드를 상황이나 요건에 맞게 변형해서 사용하는 것이다. 이해를 위한 비유 : 커피가 든 잔을 줬는데 홍차가 땡겨서 커피 버리고 홍차를 따라 마시는 것 @Override는 오버라이드 하는 함수의 형식을 상속받는 함수의 형식과 다르게 하거나 이름을 다르게 하는 등의 실수를 방지해준다. 하지만 방지해주는거지 필수는 아니다.다만 실수 안 할 자신이 있다고 해도 보고 이해하기 편한데 안 쓸 이유도 굳이 없는 것 같다. 아래 예시에서 @Override가 있는 hello 메소드의 경우 String 매개변수를 안 쓸 경우 "부모클래스에 이거랑 같은 형식의 메소드가 없습니다."라고 에러가 뜬다. ide에서 친절하게 바로 만들기를 추천해주기도 한다. @Override가 없는 hi 메소..
·CS
인터페이스란? 추상 메서드만을 가질 수 있고 구현메서드는 가질 수 없는 일종의 추상 클래스다. 이해를 위한 비유 : 교수님 과제와 같다. 교수님은 과제 주제(이름)만 던져주시지 뭘 채워주시지는 않는다. 채우는 건 학생(자식클래스)의 몫이다. 그래서 자식클래스들에게 함수의 기능을 강제적으로 전부 구현하게 하는데에 목적이 있다. 이때문에 다형성의 특징을 갖고 있다. 또한 추상화는 따로 구현을 해야 하는게 아니라 공통적인 속성과 기능을 정의하는 것이기 때문에 추상화를 할 때 편리하게 사용할 수 있다. 다만 일반 추상 클래스와 다르게 상속해 줄 기능이 구현된 메서드가 없기 때문에 상속성의 특징은 없는 것 같다. 캡슐화도 인터페이스는 추상메소드만 있기 때문에 힘들 것 같다... 참고로 자바는 클래스의 다중 상속을..
·CS
다형성이란 먼저 예를 들자면 지금의 나는 아들이자 친구이자 학생인 것처럼 같은 이름을 하고 있지만 상황이나 맥락 등 여러 요건에 따라 다른 역할을 수행할 수 있는 특성이다. 대표적으로는 메소드 오버라이딩과 메소드 오버로딩이 있다. public interface Phone { public abstract void TurnOff(); public abstract void TurnOn(); // 폰마다 벨소리는 다를 수 있다. public abstract void Call(); } public class AndroidPhone implements Phone{ //안드로이드 폰 벨소리 @Override public void Call(){ System.out.println("빰~ 빠밤 빰~ 빰 바빰 빰 밤"); ..
·CS
캡슐화란 클래스가 쉽게 손상되거나 변형되지 못하게 내부를 보호,은닉하는 것이다. 하지만 외부와의 접속을 위해 몇 부분만 공개 노출할 수도 있다. 캡슐화 방법은 크게 2가지가 있다. 접근 제어자를 사용하는 방법 private (클래스 내에서만 접근 가능) dafult (같은 패키지 내에서만 접근 가능) protected (같은 패키지 + 다른 패키지의 하위클래스에서 접근가능) public (어디든 접근 가능) 접두어 get/set을 붙인 메소드를 사용하는 방법 public class AndroidPhone{ // 접근을 허용 안하는 멤버변수 private String color; // 외부에 접근을 허용할 멤버변수 private String model; // public으로 열려있는 get/set메소드를 ..
·CS
상속성(inheritance)이란 기존에 있던 클래스에 살을 붙이거나 변형,확장(extends)해서 새로운 클래스를 만드는 자바의 문법요소를 뜻한다. 이때 기존에 있던 클래스를 ( 상위,부모,super ) 클래스 ,새로운 클래스를 ( 하위,자식,sub ) 클래스라고 한다. 추상화를 통해 묶은 공통점들이 보통 부모로 많이 쓰인다. // 부모 클래스 public class Phone { String model; String company; void Call(){ System.out.println("신호가 가는 중 입니다."); }; void TurnOff(){ System.out.println("전원을 종료합니다."); }; void TurnOn(){ System.out.println("전원을 켭니다.");..