ssung_항해일지/항해99_프로그래밍 기초(알고리즘)

알고리즘 - 1일차

ssungcohol 2023. 1. 28. 04:33

객체지향의 4대 특성

  • 캡슐화 : 정보의 은닉
    => 세부사항을 감추는 것, 변경하기 쉬운 객체를 만들기 위해 사용, 객체 내부 접근 제한(유연한 설계 가능)
  • 상속 : 재사용
    => 코드 중복제거로 재사용성 증가, 클래스 간의 체계화 된 구조파악, 상위 클래스만 수정하므로써 일관성 유지
  • 추상화 : 모델링
    => 공통 부분을 모아 상위 개념으로 새로 선언, 공통적이고 중요한 것만 모델링, 외부노출 된 인터페이스만 사용
  • 다형성 : 사용의 편의
    => 객체가 가지고 있는 고유의 특성에 따라 다른 여러가지 형태로 재구성 (오버로딩, 오버라이딩을 생각해라!)

객체지향의 설계 5원칙

  1. 단일 책임의 원칙 (SRP - Singe Responsibility Principle)
    => 단 하나의 책임을 갖는 객체 : 역할과 책임을 클래스로 분리하여 연관있는 클래스와 각각 따로 관계를 맺어 영향력↓
  2. 개방 폐쇄 원칙 (OCP - Open-Close Principle)
    => 자신의 확장에는 열려있고, 변화에는 닫혀 있어야한다.
  3. 리스코프 치환의 원칙 (LSP - Liskov Substitution Principle)
    => 하위 클래스 인스턴스는 상위형 객체 참조변수에 대입해 상위 클래스의 인스턴스 역할을 하는데 문제 없어야 한다.
  4. 인터페이스 분리의 원칙 (ISP - Interface Segregation Principle)
    => 특정 클라이언트를 위한 인터페이스 여러개가 범용 인터페이스 하나보다 낫다.
    => 클라이언트가 필요하지 않는 기능을 가진 인터페이스에 의존해서는 안되고 최대한 인터페이스를 작게 유지해라
  5. 의존성 역전 원칙 (DIP - Dependency Inversion Principle)
    => 고차원 모듈은 저차원 모듈에 의존하면 안된다. 이 두 모듈 모두 다른 추상화 된 것에 의존해야 한다.
    => 추상화 된 것은 구체적인 것에 의존하면 안된다. 구체적인 것이 추상화 된 것에 의존해야 한다.
    => 자주 변경되는 구체 (concrete) 클래스에 의존하지 마라!

코테풀이

 

if (a > b) {
	for (int i = b; i <= a; i++) {
    	answer += i;
    }
} else if (a == b) {
	answer = a;
} else if (a < b) {
	for (int i = a; i <= b; i++) {
    	answer += i;
    }
}

=====================================

for (int i = Math.min(a,b); i <= Math.max(a,b); i++)
	answer += i;
int answer = 0;
answer = Integer.parseInt(s);
return answer;

// 최대한 간결하게해라!
// 당장에 3줄과 1줄의 결과는 똑같지만
// 1000개의 data를 받으면
// 3000줄과 1000줄이 된다!
====================================

return Integer.parseInt(s);

class AddOperation {
	//속성(멤버변수)
	String operator;
	//기능(메서드)
	answer = firstNumber + secondNumber;
}

// 보기만해도 알아야한다 진짜... 모르면... 하아...
728x90