본문 바로가기

전체 글

(90)
배열 vs 리스트 1. 배열 - 크기를 바꿀 수 없는 정적 자료형 - 데이터에 접근하기 위한 인덱스가 존재하여 검색 속도가 빠르다. - 하지만, 데이터의 위치가 인덱스와 맵핑되어 고정되기 때문에 데이터가 삭제되는 경우 - 배열의 빈 부분의 메모리가 낭비된다. - 그렇기에 배열의 해당 인덱스에 데이터가 존재하는지 파악하는 로직이 추가적으로 필요하다. - 검색에는 효율적이지만, 추가 및 삭제에 대해서는 비효율적이다. 2. 리스트 1) ArrayList - 내부적으로 데이터를 배열에서 관리하며 추가, 삭제 시 임시 배열을 생성하여 데이터를 복사한다. - 대량의 자료를 추가, 삭제할 시 메모리 소모가 크고, 시간이 오래 걸려 성능저하가 발생 - (삭제 시 제거되는 인덱스를 기준으로 뒤에 있는 객체가 한칸씩 이동한다.) - 초기 ..
[ Android ] Proguard 초간단 정리 1. Proguard란? 힘들게 작업한 코드들을 남이 디컴파일해서 카피한다면, 허무(?)해질뿐 만 아니라 회사 입장에서는 엄청난 손해를 볼 수 있습니다. 그래서 코드 난독화라는 것이 필요한데, 이러한 코드 난독화를 해주는 서비스 중 하나가 안드로이드 스튜디오에서 기본으로 제공하는 Proguard입니다.(유료버전: Dexguard) 2. 사용 이유 위에서 말한 코드 난독화도 필요하지만, 앱의 크기를 줄이는 것 또한 배포할 앱 개발에 있어서 빼놓을 수 없는 부분입니다. 1) 코드 난독화를 통해 디컴파일(Decompile) 시 소스 코드가 노출되는 것을 방지할 수 있다. 코드 난독화: 워딩 그대로 작성된 코드를 읽기 어렵게 만드는 작업. ex) 알고리즘이나 로직, 자료형, 변수명 등을 보기 어렵게 만들거나 숨..
Synchronized 스레드 간 동기화를 시켜 data의 thread-safe를 가능케함 여러 개의 스레드가 한 개의 자원을 사용하고자 할 때 현재 데이터를 사용하고 있는 해당 스레드를 제외하고 나머지 스레드들은 데이터에 접근할 수 없도록 막는 개념
Serialization 자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 byte형태로 데이터를 변환하는 기술. 시스템적으로 얘기하면 JVM의 메모리에 상주(힙 또는 스택)되어 있는 객체 데이터를 byte 형태로 변환하는 기술. ex) String을 JSON 형태로 발굴 할 때 Member member = new Member("송규빈",thd0427@naver.com) String json = String.format(~~~~member.getName()~~) => { name: "송규빈", Email: "thd0427@naver.com" }
SOLID 원칙 ※※ 그저 공부하는 흐름대로 작성한 것이니 정돈된 글이 아님 주의 ※※ 1) SRP: 단일 책임 원칙 객체는 단 하나의 책임만 가져야 한다는 원칙이다. 즉, 데이터를 읽는 부분과 렌더링(읽어온 데이터를 뿌려주는) 되는 부분은 다른 클래스여야한다. SRP에 따른 설계를 하면 응집도는 높게, 결합도는 낮게 설계할 수 있게 된다. - 응집도: 해당 기능을 수행하기 위해 얼마만큼의 기능과 아이디어가 뭉쳐있는지를 나타내는 정도 - 결합도: 프로그램 구성 요소들 사이가 얼마나 의존적인지를 말한다. - 응집도가 낮은 클래스의 문제: 이해하기가 힘들고, 재사용이 힘들다. 또한 유지보수가 매우 쉽지 않으며 클래스 변화에 민감하다. - 결합도가 높은 클래스의 문제: 클래스의 규모가 커지기 때문에 이해하기 쉽지 않으며, 변..
오버라이딩과 오버로딩 ※※ 그저 공부하는 흐름대로 작성한 것이니 정돈된 글이 아님 주의 ※※ 오버라이딩과 오버로딩은 자바의 다형성을 구현하는 대표적인 방법이다. 오버라이딩은 하위 클래스의 성격에 맞게 부모 클래스의 함수를 재정의하는 것을 말한다. 이때 부모 클래스와의 시그니쳐가 완전히 같지만 내부 구현이 달라지는 형태이다. 오버로딩은 함수 이름만 같고 나머지 시그니쳐가 다른 것을 말한다. 파라미터 자료형이나, 개수 등을 다르게 정의함으로써 확장된 함수를 새로 정의하고 구현하는 것을 말한다.
interface 사용 이유 1. Cooperation (협업) 예를 들어 우리는 한국인을 위한 번역기를 만들어 볼거에요. 아 전세계 언어가 너무 많아요ㅠㅠ 그래서 업무를 나눠봤어요. "너는 영어 번역 클래스를 만들어, 난 중국어 번역 클래스를 만들게. 준비~ 시작!" 하고 각자 다 만들어서 결과물을 공유했어요. 아래와 같은 결과물이 나왔어요. /** * @author 팀원1 */ public class EnglishTrans { public String koreanToEnglish(String str) { //TODO: 한국어를 영어로 번역 } public String englishToKorean(String str) { //TODO: 영어를 한국어로 번역 } } 다른 친구가 만든 클래스를 볼게요. /** * @author 팀원2..
자바에서 클래스 다중상속을 막은 이유 ※※ 그저 공부하는 흐름대로 작성한 것이니 정돈된 글이 아님 주의 ※※ 클래스 다중 상속에는 여러가지 문제가 내재되어 있다. 예를 들어 변수명 충돌이나 중복된 클래스 상속으로 인해 오버라이딩이 모호한 다이아몬드 문제가 대표적이다. 무엇보다 자바는 객체지향언어이기에 다중상속을 지원하면 객체지향이 무너질 수 있다. 객체지향의 단일책임 원칙에 의해 클래스는 오직 하나의 기능을 가지고 그 하나의 책임에 집중해야되며, 리스코브 치환 원칙에 따라 자식 클래스를 몰라도 부모 클래스의 함수를 사용할 수 있도록 대치가 가능해야 한다. 하지만 다중상속을 허용하면 클래스의 성질이 복합적으로 섞여 부모와 IS-A 관계가 모호해져 정체성이 불분명해질 수 있다. 이것은 위 객체지향 원칙에 위배되기에 이런 문제를 막고자 다중상속을..