자바 언어 - 용어, 개념과 궁금증

최민수·2023년 2월 23일
0

프로그래밍 언어

목록 보기
1/14

TDD - Test Driven Development 방법론

테스트케이스 - 테스트 자동화 기술

  • { Red } 단계에서는 실패하는 테스트 코드를 먼저 작성한다.
  • { Green } 단계에서는 테스트 코드를 성공시키기 위한 실제 코드를 작성한다.
  • Blue } 단계에서는 중복 코드 제거, 일반화 등의 리팩토링을 수행한다.

TDD 개발 방식의 장점

  • 협업 퍼포먼스 상승
    • 공유가 쉬워진다. 다른 사람의 코드를 쉽게 접근 가능하고, 이해가 빨라진다. 그렇게 되면 다른사람의 코드 의도를 확인할 수 있게 된다.
  • 재설계, 디버깅 시간 단축, 추가 구현이 쉽다.
    • 처음 해보는 프로그램 주제, 내부 또는 외부의 불확실성이 높은 경우, 개발하는 중에 코드를 많이 바꿔야 된다고 생각하는 경우에 효과적이다.

TDD 개발 방식의 단점

  • 가장 큰 단점은 바로 생산성의 저하이다.
  • 개발 속도가 느려진다고 생각하는 사람이 많기 때문에 TDD에 대해 안좋게 얘기하는 사람들도 있다.

TDD 방식에 대한 개인적인 생각

  • 소소한 동기부여가 될 것 같다. 퀘스트를 한 개씩 해결해 나가는 느낌?
  • 산업 전반에서 쓰는 좋은 개발 방식이라고 들었다.
  • 개발 속도가 느려질 순 있지만, 단순하고 자신있는 프로젝트가 아닌 곳에서 쓰면 매우 도움이 되는 방식이라고 생각한다.

참고: http://clipsoft.co.kr/wp/blog/tddtest-driven-development-%EB%B0%A9%EB%B2%95%EB%A1%A0/


static 개념과 쓰임새

  • 클래스 변수에 static 을 붙이면 새로운 객체 생성이 되더라도 새로운 변수가 생성되지 않는다. 따라서, 공유의 목적으로 많이 사용한다.
  • 클래스 메서드에 static을 붙이면 객체를 생성하지 않아도 클래스에서 직접 호출이 가능, 붙이지 않으면 생성된 객체에서 접근이 가능.
  • 객체마다 고정이 되는 값은 static으로, 그렇지 않고 객체마다 각각 가져야 하는 값은 static으로 선언하지 않는다.

참고: https://wikidocs.net/228


상속

  • 객체지향의 큰 목적 중 한 가지는 중복 코드를 줄이고 없애는 것이다. 상속도 이를 위한 개념이다.
class 오리 {
  void 날다() {
    System.out.println("오리가 날개로 날아갑니다.");
  }
}

class 흰오리 extends 오리 {
  
}

class 고무오리 extends 오리 {
  // 메서드 오버라이드
  // 메서드 재정의 => 부모가 물려준 능력을 다시 구현한다.
  void 날다() {
    System.out.println("저는 날 수 없어요. ㅜㅠ");
  }
}

class 로봇오리 extends 오리 {
  void 공격() {
    System.out.println("오리 공격!");
  }
}
  • 흰오리, 고무오리, 로봇오리는 모두 오리를 상속하고 있다. 따라서 오리는 아래 세 클래스의 부모 클래스.

  • 오리를 상속하고 있는 세 클래스는 모두 오리클래스에 정의되어 있는 날다() 메서드를 사용할 수 있다.

    • 모든 오리는 날 수 있음. → 중복 코드 제거
  • 그러나 자바에서는 다중 상속이 안되기 때문에 상황이 조금만 복잡해지면 한계가 있다.

    • 다중 상속은 클래스가 동시에 하나 이상의 클래스를 상속받는 것을 뜻함. (아래와 같은 코드)

      class C extends A, B {...}
  • 자바는 이러한 불명확한 부분을 컴파일 타임에 애초에 잘라 낸 strict한 언어이다.

    • 다중 상속을 허용하면 어떤 클래스의 메서드를 실행해야 할지 애매모호 해지기 때문이다.

[개인적인 궁금증] 오버라이딩(Overriding) vs 오버로딩(Overloading)

  • 상속관계에 있는 두 클래스에서, 부모 클래스의 메서드를 자식클래스가 동일한 형태로 또다시 구현하는 행위를 메서드 오버라이딩(Method Overriding) 이라고 한다. (메서드 덮어쓰기)
  • 파라미터의 갯수나 타입이 다른 경우 동일한 이름의 메서드를 만들 수 있는데 이를 메서드 오버로딩(method overloading) 이라고 부른다.

참고: https://wikidocs.net/280#method-overriding


자동 형변환

// 가능
int i = 5;
float d = i;

// 불가능 -> 자바 컴파일 에러
float d = 5.0f;
int i = d;
  • 자바 컴파일러는 안전하다고 판단하면 자동 형변환을 해준다.
  • 값 자체로 판단하는 것이 아니라, float형이 담을 수 있는 범위가 int형보다 크기 때문.
    • int → float 로의 형변환은 가능.
    • float → int 로의 형변환은 불가능한 것.
  • 객체지향 프로그래밍의 중요한 특징 중 한 가지인 다형성 으로도 생각해 볼 수 있다.
class 자동차 {}
class 스파크 extends 자동차 {}

public static void main(String[] args){
	자동차 a자동차 = new 스파크(); // 스파크 -> 자동차 형변환 (ok)
	스파크 a스파크 = a자동차; // 자동차 -> 스파크 (X); 컴파일 에러
}
  • 해결법: 수동 형변환을 통해 가능.
    스파크 a스파크 = (스파크) a자동차; // (자동차 -> 스파크) -> 스파크 (ok)

참고: [LIKELION] 장희성 강사님 예제


profile
CS, 개발 공부기록 🌱

0개의 댓글