본문 바로가기

JAVA/OOP

OOP : Overlading (오버로딩 - 다형성) & Overriding(재정의 - 상속) 오버로딩(Overloading) : 한 클래스 내에서 메소드의 매개변수 개수와 타입이 다르면 같은 이름으로 사용가능하다. 두가지 종류 메소드 오버로딩 , 생성자 오버로딩 메소드 오버로딩 - 메소드 중복 정의라고 부릅니다. - 매개변수가 다르면 메소드의 이름이 같아도 됩니다. - 한 개의 클래스나 상속 관계에 있는 클래스에 서로 매개 변수의 타입이나 개수가 다른 여러 개의 메소드가 같은 이름으로 작성되는 것을 말합니다. - 동적 바인딩인 오버라이딩과 다르게 정적 바인딩입니다. - 메인 메소드에서 다른 메소드를 호출할 때 편의를 위해서 고안되었습니다. . 1. 메소드 이름이 같아야한다2. 매개변수의 개수 또는 타입이 달라야한다.3. 매개변수는 같고 리턴타입이 다른 경우는 오버로딩이 성립되지 않는다. ※ 정적.. 더보기
OOP : Inheritance (상속) 상속 [Is a 관계 => 사자는 동물이다.] 객체와 객체간의 관계Parent class [=super class]child class [=sub class] Reference Type : Type Casting에 관하여부모클래스가 자식클래스보다 크다. 관련성이 없는 클래스를 상속한다면, is not a 관계가 발생하고, 상속의 좋은 예라고 볼 수 없다.두 클래스가 IS A 관계가 아니라면, 그 두 클래스는 서로 다른 역할을 수행한다는 의미를 갖는다. extends 상속은 정말 필요할 때만 쓰자! is a 관계는 아니지만, 필요한 기능이라면 조립(Composition)하여 재사용할 것을 권한다. 조립을 통한 재사용은 다음과 같이 필드로 재사용할 객체를 정의하고 메서드 내부에서 해당 필드를 사용하는 식으로.. 더보기
OOP : Encapsulation (캡슐화) 1. 접근제한자 (Public Private Protected 등) 을 주어서 변수를 모르게 하는 것. 2. 받고자 하는 것들을 Class로 만들어서 class로 반환을 주고, 그 안에서 필요한 메소드를 사용 하게 하는 것. 절차지향에서는 요구 변경시, 많은 코드의 수정이 필요하다. 객체지향에서는 클래스로 만들어 모듈화 해서, 요구 변경에 대한 클래스안에 메소드만 추가하여사용자가 추가된 기능을 사용하게 하면 된다!! 이거구나!!!코드의 수정을 최소화 하는 것!! 더보기
OOP : Polymorphism (상속/인터페이스에 의한 다형성) 객체지향을 하는 이유 : 유지보수 비용을 절감하기 위해캡슐화: 내부의 구현이 변경되더라도 외부에 영향을 최소화다형성: 구현체 변경의 유현함을 제공 두가지의 다형성 상속에 의한 다형성 VS 인터페이스에 의한 다형성 1. 상속에 의한 다형성 Animal monkey = new Monkey(); Animal lion = new Lion(); Animal Rabbit = new Rabbit();이렇게 부모인 Animal type으로 형태를 통일시켜준다면, Animal type의 메소드에 대한 특정한 처리를 할 수 있다.public void moveTest(Animal animal) { for (int i = 0; i < animal.length; i++) { if (animal[i] instanceof Lion.. 더보기
OOP : Abstraction (추상화) 추상화Abstraction란? 추상화의 사전적 의미는 특정한 개별 사물과 관련되지 않은 공통된 속성이나 관계 등을 뽑아내는 것이다. 이를 컴퓨터 관점에서 생각해보면, 추상화란 데이터나 프로세스 등을 의미가 비슷한 개념이나 표현으로 정의해 나가는 과정이면서 동시에 각 개별 개체의 구현에 대한 상세함은 감추는 것, 이것이 추상화다. 추상화란 결국 개발자의 뇌를 위한 것 로그 분석 기능을 생각해보면 큰 덩어리로 '로그 파일을 읽어와 파일을 한줄 한줄 파싱한 뒤 계산해서 내용을 DB에 저장한다'일 것이다. 이런 상세함을 한 번에 다 머리속으로 생각할 수 있는 사람은 많지 않다. (물론, 정말 똑똑한 사람은 한 번에 다 생각할 수 있겠지만..) 그래서 필요한 게 생각이 가능한 수준의 덩어리로 나눠서 생각하는 것이.. 더보기
객체지향의 5원칙 (SOLID) RP : Single Responsibility Principle 단일 책임 원칙 OCP : Open Closed Principle 개방-폐쇄 원칙 LSP : Liskov Substitusion Principle 리스코프 치환 법칙 ISP : Interface Segregation Principle 인터페이스 분리 원칙 DIP : Dependency Inversion Principle 의존성 역전 법칙 1. SRP : 단일 책임의 원칙 모든 클래스는 단 하나의 책임을 가져야 한다는 원칙 - 모듈화 할 것!! 클래스가 가지는 역할은 단지 하나의 객체에 대한 것이어야 한다. 2. OCP :개방-폐쇄 원칙 모든 소프트웨어 구성 요소는 확장에 대해서는 개방되어있지만, 수정에 대해서는 폐쇄되어있다는 원칙 - 확장.. 더보기
OOP : Abstraction, Encapsulation, Inheritance and Polymorphism 1. 추상화 ( Abstraction ) - 공통의 속성이나 기능을 묶어 이름을 붙이는 것 -> 즉, Class 2. 캡슐화 ( Encapsulation ) - 객체의 속성(data fields)과 행위(메서드, methods)를 하나로 묶는다. - Information Hiding : 내부의 동작을 외부로부터 최대한 숨기는 것(Get ,Set 에 관한..) > Dynamic Binding & Static Binding Static Binding Object의 타입이 컴파일러에 의해 Compile Time 에 결정되고 Stack 영역에 메모리 참조가 일어난다. 메소드의 경우 모두 정적 바인딩에 해당한다. Dynamic Binding Object의 타입이 Runtime 중에 결정된다. 컴파일러는 컴파일시 .. 더보기
Class, Instance and Object 클래스 : 메모리 할당 전에는 존재하지 않는다. -> 프로그램 내에서 독립적인 업무를 처리할 수있는 모듈 객체의 정의 : 실제로 존재하는 것, 사물 또는 개념. 객체의 용도 : 객체가 가지고 있는 기능과 속성에 따라 다름. 유형의 객체 : 책상, 의자, 자동차등과 같은 사물. 무형의 객체 : 수학공식, 프로그램 에러와 같은 논리나 개념. !-- 소프트웨어적인 추상화를 한 것. --! Class : 객체가 가지는 설계도(blueprint) 또는 프로토타입(prototype) - Attribute 와 Method를 갖는다. 클래스라는 것은 있으나, 물리적으로 존재하지 않는것. 홍길동이라고 선언하면 그것이 인스턴스화 된 것이며, 홍길동이라는 객체로 존재하게 된다. !-- Class를 선언하여, 메모리 공간에 .. 더보기
객체지향언어 (Object Oriented Programming Language) 절차 지향 프로그래밍(procedural programming) - C언어. 물이 위에서 아래로 흐르는 것처럼 순차적인 처리가 중요시 되며 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법 Backgraound 옛날에는 하드웨어와 소프트웨어의 개발 속도차이가 크지 않았습니다. 하지만 소프트웨어 언어의 발달과 컴파일러의 발달로 하드웨어가 소프트웨어의 발달을 따라오지 못하는 상황이 발생했습니다. 이는 객체지향 언어가 등장하게 되는 계기로 작용했습니다. 객체지향 프로그래밍은 개발하려는 것을 기능별로 묶어 모듈화를 함으로써 하드웨어가 같은 기능을 중복으로 연산하지 않도록 하고,모듈을 재활용하기 때문에 하드웨어의 처리량(Throughput) 을 획기적으로 줄여주었습니다. 절차지향의 단점 - 재사용할 수.. 더보기