본문 바로가기

Java의 정석53

캡슐화와 접근 제어자 1. 주로 멤버에 접근 제어자를 사용하는 이유는 클래스 내부에 선언된 데이터를 보호하기 위함. 데이터가 유효한 값을 유지하도록, 또는 비밀번호와 같은 데이터를 외부에서 함부로 변경하지 못하도록 하기 위해서는 외부로부터의 접근을 제한하는 것이 필요 하다. 이러한 개념은 객체지향개념의 캡슐화에 해당 된다. 2. 다른 이유로는, 해당 클래스 내에서만 사용되는 즉, 내부 작업을 위해 임시로 사용되는 멤버변수, 메서드 등의 멤버들을 클래스 내부에 감추기 위함 이다. 어차피 해당 클래스 내에서만 사용되니까, 외부에서 접근할 필요가 없으니, 멤버들을 private 처리를 해서 외부에서 노출되지 않도록 하는 것이다. == 복잡성을 줄인다는 말. 이러한 개념도 역시 캡슐화에 해당 된다. 3. 캡슐화 ( == 모듈화, 컴.. 2023. 6. 6.
제어자 1. 제어자의 종류는 크게 접근 제어자와 그 외의 제어자로 나눌 수 있다. 2. 접근 제어자는 하나의 대상에 하나만 선택해서 사용할 수 있다. 3. 그 외의 제어자들은 하나의 대상에 여러 제어자를 조합해서 사용할 수 있다. 4. 주로 사용되는 그외의 제어자들은 static, final, abstract, .. 위와같이 메서드에 static을 붙혀서 객체와 무관한 클래스 메서드를 만들면, 인스턴스 변수를 직접 사용할 수 없게 된다. why ? 인스턴스 변수는 객체가 만들어져야만 사용 가능 해서. // 클래스 메서드는 객체없이도 사용 가능한 메서드 인데, // 인스턴스 변수가 허용이 되면, 인스턴스 변수의 객체가 있는지 없는지를 알 수 없으니까. static이 붙혀져 있는 클래스 변수는 모든 인스턴스에 공통.. 2023. 6. 6.
생성자 super() 마치, 참조변수 this와 생성자 this()와 마찬가지로, 참조변수 super 와 생성자 super()는 완전 다른 개념이다. 1. 자식 클래스 내부의 생성자에서 부모의 멤버변수를 직접 초기화 해도 오류가 뜨지는 않는다. 2. 하지만 절대로 그렇게 부모의 멤버변수를 자식이 직접 초기화 하지 않는다. 3. 부모의 멤버변수는 부모 자기 자신이 직접 초기화를 한다. 어떻게 ? super() 메서드를 통해 본인의 생성자를 호출 해서. 1. 부모의 멤버변수 x와 y를 상속받았기에, 자식은 this.x와 this.y로 표현이 가능하다. 2. 같은말로, 부모의 멤버변수 x와 y이기에 자식에서 부모의 멤버변수를 사용한다는 의미로, super.x와 super.y로 표현이 가능하다. 3. 암튼, 위에처럼 하지 않고 아래.. 2023. 6. 5.
참조변수 super 1. 생성자 내부에서만 존재가 가능 == 객체와 무관한 static 메서드 내에서는 사용 불가 1. 부모 클래스인 Parent 클래스의 멤버변수는 이 클래스 내부의 생성자 에서 x와 y가 각각 this 참조변수를 붙혀서 사용 가능 하다. 2. 자식 클래스인 Child 클래스에서는 이 x와 y에 각각 super 참조변수를 붙혀서 본인의 멤버변수와 구분을 지어 줄 수 있다. 1. 위처럼, 부모의 멤버변수도 x, 자식의 멤버변수도 x로 동일 하면 ? 컴퓨터는 가장 가까운 x인 자식의 멤버변수 x로 인식하게 된다. 2. 그래서 x는 자식의 멤버변수 이고, this.x는 당연히 자기 자신을 의미하는 멤버변수 x 3. 부모의 멤버변수 x를 부르고 싶으면 ? 참조변수 super을 붙혀서 불러 오면 된다. 1. 위의 .. 2023. 6. 5.
오버라이딩 (Overriding) 오버로딩 vs 오버라이딩 2023. 6. 5.
단일 상속 (Single Inheritance), Object클래스 1. 다른 객체지향언어인 C++에서는 여러 조상 클래스로부터 상속받는 것이 가능한 '다중상속'을 허용. 2. 자바에서는 단일 상속만 허용. 3. 단일 상속이 하나의 조상 클래스만을 가질 수 있기 때문에 다중상속에 비해 불편한 점도 있지만, 클래스 간의 관계가 보다 명확해지고 코드를 더욱 신뢰할 수 있게 만들어 준다는 점에서 다중상속보다 유리하다고 볼 수 있다. 1. TvDVD 클래스는 Tv 클래스를 상속 받은 상황. 2. DVD 클래스를 TvDVD 클래스에 포함관계로, 선언과 초기화를 통해 객체를 생성. 3. TvDVD 클래스는 1개의 멤버변수와 4개의 메서드를 가지고 있는 상황. 4. 63번째 줄 부터 69번째 줄 TvDVD의 메서드를 호출하면 { } 블럭 안에 DVD 클래스의 메서드를 호출 하는 모습.. 2023. 6. 5.
클래스 간의 관계 - 포함관계 2023. 6. 4.
상속 (Inheritance) 상속의 특징 1. 코드의 재사용성 증가 (개발 시간 단축, 개발 비용 절감, 이익 증가) 2. 코드의 유지보수 용이 3. 오류의 파급효과가 줄어든다. 사용 개념 1. 부모(상위) 클래스에서 미리 공통 부분을 코딩 해놓기. 2. 자식(하위) 클래스에서 '상속' 받아 세부적인 부분을 구현 하기. 상속을 사용할 시 주의 사항 ★ 부모 클래스의 코딩이 끝나면, 자식 클래스의 코딩을 시작하기 ★ ★ 본인이 사용하는 모든 멤버변수를 다 초기화 하고 있는지를 확인 ★ 참고 : 멤버변수 = 클래스 변수 + 인스턴스 변수 [ 예제 ] 1. Tv 클래스. 2. 멤버변수를 2개, 메서드를 3개 가지고 있다. 1. Tv 클래스를 상속받은 SmartTv 클래스. 2. 부모의 멤버변수 2개 + 본인의 멤버변수 1개 == 총 3개.. 2023. 6. 4.