Java/OOP

    캡슐화 - getter(획득자)와 setter(설정자) 메소드

    메소드를 통해 데이터를 변경하는 이유? 객체지향프로그래밍에서는 객체 무결성을 위해 메소드를 통해 데이터를 변경하는 방법을 선호한다. 데이터는 외부에서 접근하지 않도록 막고, 메소드는 공개하여 외부에서 메소드를 통해 데이터에 접근하도록 유도한다. 메소드는 매개값을 검증해서 유효한 값만 데이터로 저장할 수 있기 때문이다. getter(획득자) 외부에서 객체의 데이터를 읽어오는데 사용 메소드명 앞에 get을 붙여서 정의 setter(설정자) 외부에서 메소드에 접근하여 조건에 맞을 경우 데이터 값을 변경 가능 메소드명 앞에 set을 붙여서 정의 private 접근제어자가 포함되어 있는 객체의 변수의 데이터 값을 수정하는 예시 class Worker { private String name; // 외부에서 접근 불..

    추상화(Abstraction) - 인터페이스(interface)

    인터페이스(interface) 추상 클래스를 “미완성 설계도"에 비유할 수 있다면, 인터페이스는 그보다 높은 추상성을 가지는 “밑그림"에 빗대어 표현할 수 있다. 다중상속이 가능하다. final 키워드 더이상 확장하거나 변경할 수 없는 마지막 단계의 클래스나 메소드 또는 변수에 사용하는 제어자이다. 수정제어자라고도 한다. 클래스의 기능이나 일관성에 중요할 수 있는 메소드를 변경하는 하위 클래스의 예기치 않는 행동을 방지하기 위해 사용 필드, 지역 변수, 클래스 앞에 위치할 수 있으며 그 위치에 따라 그 의미가 달라진다. 위치 의미 클래스 변경 또는 확장 불가능한 클래스, 상속 불가 메서드 오버라이딩 불가 변수 값 변경이 불가한 상수 인터페이스의 기본 구조 인터페이스의 모든 메소드는 자동으로 퍼블릭 추상 ..

    추상화(Abstraction)

    추상화(Abstraction)

    추상화(Abstraction) 기존 클래스들의 공통적인 요소들을 뽑아서 클래스를 정의하는것 상향식과 하향식 설계 모두 상관 없다. 불필요한 부분을 생략하고 객체의 속성 중 가장 중요한 것에만 중점을 두어 개략화하는 것, 즉 모델화하는 것으로 데이터의 공통된 성질을 추출하여 슈퍼 클래스를 선정하는 개념이다. 추상화를 사용하면 코드의 재사용성, 가독성을 높이고, 생산성의 증가, 에러 감소, 유지 보수에 있어 많은 시간을 줄일 수 있다. abstract 제어자 메서드 앞에 붙은 경우를 ‘추상 메서드(abstract method)’, 클래스 앞에 붙은 경우를 ‘추상 클래스(abstract class)’라 각각 부른다. 추상 클래스와 추상 메소드는 파생 클래스에 클래스 구현요소에 대한 청사진을 제공함으로써 클래스..

    다형성(Polymorphism)

    다형성(Polymorphism) 다형성이란 같은 자료형에 여러 가지 객체를 대입하여 다양한 결과를 얻어내는 성질을 의미한다. 자바에서 다형성을 부모 클래스 타입의 참조변수로 자식 클래스 타입의 인스턴스를 참조할 수 있도록 하여 구현한다. 다형성으로 인해 하나의 함수는 상속을 통해 기능을 확장시키고 변경하는 것이 가능하다. 상위 클래스의 타입으로 하위 클래스 타입의 객체 참조 예시 //참조변수의 다형성 예시 class Friend { public void friendInfo() { System.out.println("나는 당신의 친구입니다."); } } class BoyFriend extends Friend { public void friendInfo() { System.out.println("나는 당신의..

    캡슐화(Encapsulation)

    캡슐화(Encapsulation)

    캡슐화(Encapsulation) 객체의 필드, 메소드를 하나로 묶어 실제 구현 내용을 외부에 감추는 것이다. 객체 제공자와 이용자를 정확하게 나누며, 데이터의 직접 접근을 제한하므로 정보 은폐, 보안 등의 장점을 가진다. 자바에서는 캡슐화된 멤버를 접근제어자를 사용하여 노출시킬지 숨길지 결정할 수 있다. 패키지(package) 특정한 목적을 공유하는 클래스와 인터페이스들을 그룹 단위로 묶어 효과적으로 관리하기 위한 목적 패키지는 하나의 디렉토리이고, 패키지에 속한 클래스나 인터페이스 파일은 모두 해당 패키지에 속해있다. 패키지가 있는 경우 첫 번째 줄에 package 패키지명이 표시되어야 하고, 패키지 선언이 없으면 이름없는 패키지에 속하게 된다. 같은 이름의 클래스가 있더라도 각각 다른 패키지에 소속..

    상속(Inheritance)

    상속(Inheritance)

    상속(Inheritance) - (IS-A) 상속이란? 두 클래스를 상위 클래스와 하위 클래스로 나누어 상위 클래스의 멤버(필드, 메서드, 이너 클래스)를 하위 클래스와 공유 하위 클래스의 멤버 개수는 언제나 상위 클래스와 비교했을 때 같거나 많다. 장점 적은 양의 코드로 새로운 클래스를 작성할 수 있고 코드를 공통적으로 관리할 수 있기 때문에 코드의 추가 및 변경이 매우 용이하다. 객체의 다형성을 구현 할 수 있다. 상위 객체의 메소드에 문제가 있을 경우 상위 객체만수정하여 하위 객체에서 문제가 있었던 메소드를 따로 수정할 필요없다. 단점 속 구조가 복잡해질 수록 그 영향에 대한 예측이 힘들어진다. 상위 클래스에서 의미 있었던 기능이 하위 클래스에서는 의미없는 기능일 수 있다. 상속 제외 부모클래스로..

    내부 클래스(Inner Class)

    내부 클래스(Inner Class) 클래스 내에 선언된 클래스로, 외부 클래스와 내부 클래스가 서로 연관되어 있을 때 편의성을 고려하여 사용 내부 클래스를 사용하면 외부 클래스의 멤버들에 쉽게 접근 할 수 있고, 코드의 복잡성을 줄일 수 있다. class Outer { // 외부 클래스 class Inner { // 인스턴스 내부 클래스 } static class StaticInner { // 정적 내부 클래스 } void run() { class LocalInner { // 지역 내부 클래스 } } } 종류 선언 위치 사용 가능한 변수 인스턴스 내부 클래스(instance inner class) 외부 클래스의 멤버변수 선언위치에 선언(멤버 내부 클래스) 외부 인스턴스 변수, 외부 전역 변수 정적 내부 ..

    생성자(Constructor)

    생성자(Constructor) 객체를 생성하는 역할을 하는 클래스의 구성 요소 인스턴스가 생성될 때 호출되는 인스턴스 초기화 메서드 인스턴스 생성을 담당하는 것은 new 키워드이며, 생성자는 인스턴스 변수들을 초기화하는 데 사용되는 특수한 메서드 생성자 작성 규칙 클래스명과 동일한 이름으로 지어야 한다. 생성자는 리턴 타입 자체가 없다. '리턴 타입이 없다'와 '리턴하지 않는다(void)'를 구분해야 한다. 생성자 오버로딩 예시 클래스명(매개변수) { // 생성자 기본 구조 ...생략... } // 생성자 오버로딩 예시 public class ConstructorExample { public static void main(String[] args) { Constructor constructor1 = n..