전체 글 (54) 썸네일형 리스트형 [Android] 프로가드(ProGuard)와 R8 프로가드(ProGuard)란?코드 난독화 및 최적화 도구이다. 내가 만든 앱은 누군가 디컴파일해서 카피한다해도 아무런 일도 발생하지 않지만 영향력 있는 기업의 앱을 디컴파일해서 카피한다면 회사 입장에서는 크리티컬한 손해를 입을 것이다. 뿐만 아니라 공격자가 앱의 코드를 분석해 취약한 부분을 발견하거나 중요한 데이터를 훔칠 수 있기 때문에 보안적으로도 위험하다. 따라서 앱을 출시할 때 코드 난독화 후 릴리즈를 하여 소스 코드를 보호하는데, 이때 사용할 수 있는 것이 프로가드(현재는 R8)이다. 프로가드는 컴파일된 앱 패키지 코드를 난독화하여 해당 패키지를 디컴파일 했을 때 코드를 해독하기 어렵게 한다. 프로가드는 코드 난독화뿐만 아니라 불필요한 메서드와 미사용 리소스를 제거하는 등 더 작고 빠른 앱을 만들.. [Java] 스트림(Stream)이란 스트림(Stream API)이란?데이터 시퀀스를 처리하기 위한 추상화된 개념으로 Java 8에서 도입된 기능이다. 함수형 프로그래밍 스타일 연산을 가능하게 하여 데이터를 간결하고 효율적으로 처리할 수 있도록 도와준다. (Java는 객체지향 언어이기 때문에 기본적으로 함수형 프로그래밍이 불가) 보통 많은 양의 데이터를 저장할 때, 배열이나 컬렉션(Collection)을 이용하고, 데이터에 접근을 할때는 반복문(for문, foreach문 등) 또는 반복자(iterator)를 사용한다. 이렇게 되면 index나 iterator 상태 관리와 반복문 컨트롤에 신경을 많이 써야 하고, 데이터 타입마다 다른 방식으로 다뤄야 하기 때문에 코드 재사용성이 매우 낮다. 이러한 단점들을 극복하기 위해 Java 8에서 스트림.. 객체 지향 프로그래밍 (OOP : Object Oriented Programming) 객체(Object)란?실재(實在) 하는 대상을 변수(상태, 속성)와 함수(행동)으로 추상화 시킨 개념을 말한다.눈에 보이지 않는 논리, 사상, 철학, 개념, 공식 등 무형의 대상도 포함한다.우리가 보고 느끼고 인지하는 모든 대상 = 객체 클래스(Class)와 인스턴스(instance)1. 클래스 (Class)객체를 정의하는 설계도로 객체가 가질 속성(변수), 행동(메서드)를 정의한 틀을 말한다.객체를 만들기 위한 메타정보2. 인스턴스 (Instance)특정 클래스를 바탕으로 실체화되어 메모리에 할당된 것을 말한다.객체를 클래스와의 관계에서 설명할 때 사용한다.ex) A는 B클래스의 인스턴스* 객체와 인스턴스의 관계 *객체는 일반적인 용어로, 클래스에 상관없이 프로그램에서 사용될 수 있는 모든 데이터나 기.. SOLID, 객체 지향 설계 5원칙 : 의존 역전 원칙 (Dependency Inversion Principle) DIP (Dependency Inversion Priciple) : 의존 역전 원칙'고수준 모듈은 저수준 모듈에 의존해서는 안되며,저수준 모듈이 고수준 모듈에 의존해야 한다.' 는 원칙이다. 고수준의 모듈이라는 것은 입출력과 거리가 먼 비즈니스와 관련된 추상화 모듈을 말한다. 저수준 모듈은 입출력과 가까운 HTTP, 데이터베이스, 캐시 등과 관련한 구현 모듈(세부사항)을 말한다. 결국, 비즈니스와 관련한 부분이 세부사항에는 의존하지 않는 설계 원칙을 의미한다. 추가로 의존 관계라는 것에 대해서 잠깐 설명하자면 다음과 같은 클래스가 있다고 할 때, 누가 누구를 의존하고 있는 것일까?class A { val b = B() ...}class B { ...} 클래스 A가 B를 인스턴스로 가져다 .. SOLID, 객체 지향 설계 5원칙 : 인터페이스 분리 원칙 (Interface Segregation Principle) ISP (Interface Segregation Principle) : 인터페이스 분리 원칙'범용적인 인터페이스 보다는 클라이언트에게 적합한 인터페이스를 제공해야 한다.'는 원칙을 말한다. ISP를 준수함으로써 모든 클라이언트가 자신의 관심사에 맞는 퍼블릭 인터페이스만을 접근해야 불필요한 간섭을 최소화 할 수 있다. 또한, 기존 클라이언트에게 영향을 주지 않고 유연하게 객체의 기능을 확장하거나 수정할 수 있다. 인터페이스 분리 원칙을 준수한다는 것은 어떤 부가 기능이 추가로 필요하게 된다면, 해당 인터페이스를 추가로 만들어 해결하는 것이다. 예를 들어 사용자가 비밀번호를 변경해야 하는 상황이 추가로 생겨서 새로 입력한 비밀번호가 기존 비밀번호와 동일한지 검사하는 Authentication 로직을 추가해야.. SOLID, 객체 지향 설계 5원칙 : 리스코프 치환 원칙(Liskov Substitution Principle) LSP (Liskov Subsitution Principle) : 리스코프 치환 원칙1998년 바바라 리스코프(Babara Liskov)가 올바른 상속 관계의 특징을 정의하기 위해 발표한 것으로, 하위 타입(child)은 언제나 상위 타입(parent)을 대체할 수 있어야 한다는 것을 의미한다. 즉, 상위 타입 객체를 하위 타입 객체로 대체하여도 정상적으로 동작해야 한다는 것이다. LSP의 핵심은 하위 타입이 상위 타입의 동작 규칙(계약)을 따라야 한다는 것이다. 규칙을 따르지 않다는 것은 자식 클래스(하위 타입)가 오버라이딩을 할 때, 잘못되게 재정의하면 리스코프 원칙을 위반할 수 있다는 것이다. 예를 들어 자식 클래스가 부모 클래스 메소드 시그니처를 멋대로 변경하거나, 자식 클래스가 부모 클래스의 의.. SOLID, 객체 지향 설계 5원칙 : 개방 폐쇄 원칙(Open Closed Principle) OCP (Open Closed Principle) : 개방 폐쇄 원칙'확장에 대해서는 개방되어 있고, 수정에 대해서는 폐쇄적이어야 한다.' 는 원칙을 말한다. 확장에 대해 개방적이라는 것은 변경 사항이 생길 때, 새로운 코드를 추가해 어플리케이션의 기능을 확장할 수 있다는 것이고, 수정에 대해 폐쇄적이라는 것은 변경 사항이 생길 때, 객체를 직접적으로 수정하는 것은 제한해야 한다는 것을 의미한다. 예를 들어 비밀번호 암호화를 강화하자는 요구사항이 들어왔다고 가정하자. 비밀번호 암호화 강화를 위해 SHA-256 알고리즘을 사용하는 새로운 PasswordEncoder를 만들었다. class SHA256PasswordEncoder { companion object { private const.. SOLID, 객체 지향 설계 5원칙 : 단일 책임 원칙(Single Responsibility Principle) 객체 지향 설계 원칙이란, 객체 지향의 4가지 특성인 캡슐화, 상속, 추상화, 다형성을 이용하여 올바르게 설계하는 것을 도와주는 원칙을 말한다. 좋은 소프트웨어는 자기 자신 안의 클래스 응집도는 높이고, 타 클래스 간 결합도는 낮추는 High Cohesion - Loose Coupling 원칙을 가지고 있다는 것을 객체 지향 관점에서 도입한 것이다. 이렇게 설계된 소프트웨어는 재사용성이 높고, 수정이 최소화되어 결국 유지 보수가 용이해진다는 특징이 있다. SRP (Single Responsibility Principle) : 단일 책임 원칙'하나의 모듈(클래스나 클래스의 모음)는 하나의 책임만을 가져야 한다.' 는 원칙을 말한다. SRP에서의 책임은 하나의 기능이라고 생각하면 된다. SRP 준수 여부의 .. 이전 1 2 3 4 ··· 7 다음