본문 바로가기

책 공부

(12)
interface 와 abstract class interface 와 abstract class interface 와 abstract class를 사용하는 이유 설계시 선언해 두면 개발할 때 기능을 구현하는 데에만 집증할 수 있다. 개발자의 역량에 따른 메소드의 이름과 매개 변수 선언의 격차를 줄일 수 있다. 공통적인 인터페이스와 abstract class를 선언해 놓으면, 선언과 구현을 구분할 수 있다. interface interface안에는 몸통이 없는 메소드가 선언되어 있다. public boolean equals(Object o); interface 정리 interface는 몸통이 있으면 안된다. (메소드 선언 후 중괄호를 열고, 닫거나, 중괄호 안에 한 줄의 코드도 있으면 안된다.) interface는 static이나 final 메소드가 선..
브라우저에서 URL을 입력하면 무슨일이 생길가? 브라우저에서 URL을 입력하면 무슨 일이 생길까? URL이란? URL은 Protocol, Domain, path, webpage로 구성되어 있는데 이를 하나씩 살펴보자 (실제로 생략되어 있는 부분이 더 있다.) Protocol - URL의 가장 맨 앞에 위치하며, 데이터 출처에 액세스 하는 방법을 나타낸다. (프로토콜을 기록) Domain - 웹 서버명으로 DNS에서 서버명으로 검색 후 IP주소를 반환받는다. Path - 데이터 출처(파일)의 경로를 나타낸다. HTTP 프로토콜 클라이언트와 서버가 주고받는 메시지의 내용이나 순서를 정한 것, 클라이언트에서 서버를 향해 리퀘스트 메시지를 보낼 때 메시지 안에 무엇을, 어떻게 하겠다는 내용이 들어있다. HTTP 리퀘스트 메시지 URL을 해독하고 웹 서버와 파..
Java에서 this란 무엇인가? this란? java에서 this란? this는 자기 자신을 참조하는 방식이다. 사용법 this는 보통 매개변수를 받는 생성자에서 사용하는 예약어로 많이 보았을 것이라고 생각한다. public class MemberDTO { public String name; public String phone; public String email; public MemberDTO(){} // 기본생성자 public MemberDTO(String name){ this.name = name; } public MemberDTO(String name, String phone){ this.name = name; this.phone = phone; }public MemberDTO(String name, String phone, S..
java final 알아보기 final java에서 final을 언제 사용할가? java에서는 final이라는 예약어를 클래스, 메소드, 변수에 사용할 수 있다. class에서 final을 사용하는 이유 public final class FinalClass{ } // error: cannot inherit form final FinalClass public class ExtendFinalClass extends FinalClass{ } Class에서 final을 사용하면 해당 클래스를 상속할 수 없다. 즉 더 이상 확장해서는 안 되는 클래스, 누군가 이 클래스를 상속받아서 내용을 변경해서는 안 되는 클래스를 선언할 때 final을 class앞에 선언한다. 메소드에서 final을 사용하는 이유 public abstract class ..
오버로딩(overloading) vs 오버라이딩(overriding) overloading vs overriding overloading 오버로딩 사전적 의미로는 "과적하다, 너무 많이 부하를 주다"라는 뜻이다. 이걸 자바에 대입해 보자면 하나의 메소드 이름을 사용하면서 여로 기능을 제공한다는 의미로 해석할 수 있고, 하나의 메소드 이름으로 많은 부하를 준다고도 볼 수 있다. 오버로딩은 메소드들은 모두 이름이 동일하지만 각 메소드 매개변수의 종류와 개수, 순서가 다르다. 여기서 매개변수의 개수가 같더라도 타입의 순서가 다르다면 다른 메소드로 인식한다. ( 중요! 매개 변수의 이름이 아니라 매개 변수의 타입) 타입이 다르다면 다른 메소드로 인식하지만 타입이 같다면 같은 메소드로 인식한다. + return type, 접근 제어자는 영향을 주지 않는다. public class ..
자바의 신 기본 정리 자바의 신 객체지향 관령 용어 클래스 상태와 행위를 갖는 자바의 기본 단위 상태와 행위 어떤 사물을 나타낼 때에는 상태와 행위로 구분하여 표시하는 것이 가능하며 자바에서는 상태는 클래스나 인스턴스 변수로 나타내고 행위는 메소드로 나타낸다. 캡슐화 상태와 행위를 결정하는 기능을 묶어 주는 의미로 클래스 밖에서 접근 가능한 대상을 제한하는 정보은닉, 하나의 객체를 위한 코드가, 다른 객체를 위한 코드와 무관하게 사용할 수 있는 모듈화 기능이 있다. 메시지 메소드에서 다른 메소드를 호출할 때 전달하는 값을 메시지라고 한다. 객체 클래스는 사물의 단위를 의미하고, 객체는 각 사물을 의미한다. 상속 부모에 선언된 변수와 메소드를 자식이 사용하는 것을 말한다. Overriding 부모 클래스에 선언되어 있는 메소드..
Effective Java Item 6. 불필요한 객체 생성을 피하라 불필요한 객체 생성이 필요 없는 이유 1. 같은 기능의 객체를 매번 생성하는 것보다 재사용 하는 것이 더 좋다. - 메모리 사용에 훨씬 효율적이다. (생성 비용이 아주 비싼 객체가 존재한다.) 2. 재사용 하지 않는 객체는 GC(가비지 컬렉션)의 대상이 된다. - 불변의 대상은 미리 정의해 놓고 재사용하면 처리 속도가 올라간다. 3. 오토박싱된 기본 타입보다는 기본 타입을 사용한다. - 오토박싱된 기본 타입을 사용하면 더 많은 메모리를 잡아먹는다. 오토 박싱 기본 타입의 객체를 사용하기 위해 기본 타입과 대응하는 Wrapper 클래스의 객체로 바꾸는 것 오토 언박싱 Wrapper 클래스의 객체를 사용하기 위해 대응하는 기본 타입의 객체로 바꾸는 것 기본 타입 - int, long, float, doubl..
Effective Java Item 5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 의존성 주입을 하는 이유 1. 클래스의 유연성, 재사용성이 향상된다. - 결합도가 낮아지고 응집도가 높아진다. 2. 테스트를 더 쉽게 수행할 수 있다. - 테스트를 더 쉽게 수행하면 해당 기능에 대한 모듈화가 충분히 진행되어 디버그 시 오류를 찾기 더 쉽다. 3. 변경의 전이 - 하나의 클래스 변경으로 다른 의존 관계 클래스에 영향을 최소화 해야한다. 4. 제어의 역전 - 특정 기능을 수행하기 위해 만들어진 프레임워크 제어권을 일임한다. (관심사를 분리) 클래스가 내부적으로 하나 이상의 자원에 의존하고, 그 자원에 클래스 동작에 영향을 준다면 싱글톤이나 정적 유틸리티 클래스는 사용하지 않는 것이 더 좋다. 의존 객체 주입이라는 기법을 통해 클래스의 우연성, 재사용성, 테스트 용이성을 개선해보자.