본문 바로가기

반응형

Programming/기초지식

(30)
[객체 지향] 상속보단 조립 상속을 통한 기능 재사용 시 다음과 같은 문제가 발생할 수 있다. 상위 클래스 변경이 어렵다. 클래스가 증가한다. 상속을 오용할 수 있다. 상위 클래스의 변경이 어렵다. 상속 관계에서 상위 클래스가 변경되면 상위 클래스를 상속한 하위 클래스들에 영향을 미친다. 상위 클래스 입장에서 앞으로 어떤 하위 클래스가 추가될지 알 수 없기 때문에 하위 클래스가 많아질수록 상위 클래스의 변경이 어려워진다. 또한 상위 클래스가 어떻게 동작하는지 잘 숙지하고 있어야 하위 클래스가 기능을 재사용할 수 있는데, 이는 상위 클래스는 하위 클래스에 대한 캡슐화(기능을 드러내고 구현을 감춤)가 약해진다고 할 수 있다. 클래스가 증가한다. 프로젝트 규모가 커지고 기능이 추가될 수 있다. 이런 변화에 따라 새로운 기능 추가/구현을 ..
[객체 지향] 다형성과 추상화 다형성(Polymorphism) 여러(poly) 모습(morph)을 가지는 것. 객체 지향에서는 여러 동작을 수행하는 단일 객체를 의미한다. 일반적으로 부모 객체를 자식 객체가 상속하는 방식으로 다형성을 구현하는데, 동일한 이름의 부모 객체 메서드를 자식 객체 특성에 따라 같은 이름이지만 다른 동작 방식으로 구현할 수 있다. public class Timer { public void start() { ... } public void stop() { ... } } public interface Recharegeable { void charge(); } public class IotTimer extends Timer implements Rechargeable { public void charge() { ....
[객체 지향] 캡슐화 연습 연습1 아래 코드는 id와 pwd값을 통해 계정의 유효성을 판단하는 코드이다. public AuthResult authenticate(String id, String pwd) { Member member = findOne(id); if(member == null) return AuthResult.NO_MATCH; if(member.getVefiricationEmailStatus() != 2) { return AuthResult.NO_EMAIL_VERIFIED; } if(passwordEncoder.isPasswordValid(member.getPassword(), pwd, member.getId())) { return AuthResult.SUCCESS; } return AuthResult.NO_MATCH..
[객체 지향] 캡슐화(Encapsulation) 캡슐화는 다음과 같다. 데이터와 관련 기능(메서드)을 하나로 묶는다. 객체가 어떻게 기능을 구현했는가를 외부에 감춘다.(구현 상세 내용 감춤) 이를 통해 외부 영향 없이 객체 내부 구현 변경 가능 캡슐화를 하지 않으면 코드 작성 이후 추가적인 요구사항에 의한 데이터 구조/사용 변경에 유연하게 대처하기 어렵다. 예를 들어 날짜 표현 방식을 Date에서 LocalDateTime으로 변경하려면 기존 Date 클래스 메소드를 사용하는 모든 코드를 LocalDateTime 메소드 형식으로 교체해야 하기 때문에(연쇄적으로 변경이 전파된다) 프로젝트 규모가 클수록 부담스러운 일이 된다. 이런 문제 때문에 객체 지향에서는 데이터 접근을 객체에 속한 메서드를 통해서만 할 수 있도록 한다. 캡슐화를 통해 기능을 제공하고 ..
절차지향과 객체지향 절차 지향 절차 지향은 하나의 큰 프로그램을 여러 개의 작은 프로시저(procedure_절차)들로 나누는 것을 목표로 한다. 프로시저는 서브 프로그램(subprogram), 서브루틴(subroutine), 메서드(method), 함수(function)등의 여러 이름이 있다. 절차 지향에서 프로그램 코드는 함수(function)라 불리는 프로시저들의 집합으로 구성되어 있다. 이 함수들은 변수(variable)라 불리는 데이터에 의해 동작한다. 절차지향 프로그래밍은 구조적 프로그래밍(structured programming)에서 유래되었다. 구조적 프로그래밍은 명령형 프로그래밍에서 파생된 개념이다. 절차지향 프로그래밍의 기본 개념 절차 지향 또는 절차적 프로그래밍이라고 부른다. 앞서 언급 했듯이 절차지향 프..
URI 그리고 URL URI(Uniform Resource Identifier) '통합 리소스 식별자'(라고 해도 될까?)의 약어인 URI는 인터넷 환경에서 특정 리소스를 지칭하는 문자 형태의 식별자다. URI는 두 형태로 나뉘는데, URL(Uniform Resource Locator), URN(Uniform Resource Number)이 그것이다. URL : 위치로 리소스를 식별한다. URN : 이름으로 리소스를 식별한다. URI의 세부구조 [scheme]://[authority]:[port]/[path][?query][#fragment] scheme https:// 스킴 혹은 프로토콜(protocol)로 명명된다. 웹에서 페이지 로드, 메일 및 파일 전송과 같은 특정 임무를 수행하려면 어떤 통신규약을 따라야 하는지를 명..
Parameter와 Argument의 차이점 이 두 단어의 명확한 차이점에 의문을 가지게 된 이유는 영문으로 된 원문 기술문서를 제대로 해석하기 위함이다. 별다른 소란 없이 어물쩍 넘어갈 수도 있지만, 프로그래밍은 확실히 아는 것이 매우 중요한 분야라고 생각하기 때문에 할 때 확실히 알아야 한다. Parameter(매개변수) 함수 정의에 사용되는 임의의 값(변수) Argument(전달인자) 함수가 실행되어 전달되는 실제 값 int add(int x, int y) { return x + y; } 함수 add는 변수 두 개를 더한 값을 결과로 리턴하도록 설계되어 있다. 따라서 정수 변수 x, y를 임의로 설정했다. 여기서 변수로 설정된 x, y는 매개변수라고 할 수 있다. 매개변수는 이 함수에 어떤 타입의 값이 들어와야 하는지 알려주는 표지판의 역할을..
[Lombok] 생성자를 만드는데 사용되는 Lombok 어노테이션 @NoArgsConstructor No Argument Constructor, 파라미터가 없는 생성자를 만든다.('인수'라고 해야할지, '파라미터'라고 해야할지..) 만약 필드가 final로 설정되어 있는 경우 컴파일러 에러가 발생한다. 필드가 final로 설정되어 있는 경우@NoArgsConstructor(force = true)옵션을 사용하면 final 필드를 0,false,null 등으로 강제 초기화를 하여 생성자를 만들 수 있다. @NoArgsConstructor public class Employee { private String name; private int salary; } public class Employee { private String name; private int salary; ..

반응형