728x90

개발 288

[React] state 변경 공통화 하기

리액트를 사용하면서 state가 여러개 일 때 각각 해줬었는데, 왜 공통화할 생각을 한번도 안했는지 반성했다. 내가 평소 사용하던 코드 const [name, setName] = useState(""); const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); return ( { setName(e.target.value); }} /> ... ) 이렇게 해왔는데, 이러한 코드를 공통화 하면, // const [name, setName] = useState(""); // const [email, setEmail] = useState(""); // const [password, setPassword] = useSt..

프로세스와 스레드

1. 개념 - 프로세스는 컴퓨터에서 실행되고 있는 프로그램. - 스레드는 프로세스 내 작업의 흐름. - 프로그램이 메모리에 올라가면 프로세스가 되는 인스턴스화가 발생. - 이후 운영체제의 CPU 스케줄러에 따라 CPU가 프로세스를 실행. 2. 프로세스와 컴파일 과정 - 프로세스는 프로그램으로부터 인스턴스화 된 것. - 프로그램은 컴파일러가 컴파일 과정을 거쳐 컴퓨터가 이해할 수 있는 기계어로 번역되어 실행될 수 있는 파일이 되는 것을 의미.(C언어 기반의 프로그램을 말함) 전처리: 소스 코드의 주석을 제거하고 #include 등 헤더 파일을 병합하여 매크로를 치환. 컴파일러: 오류 처리, 코드 최적화 작업을 하며 어셈블리어로 변환. 어셈블러: 어셈블리어는 목적 코드로 변환. 이때 확장자는 운영체제마다 다..

개발/ETC 2023.01.29

[Java] Raw 타입은 사용하지 말기

1. 개념 클래스와 인터페이스 선언에 타입 매개변수가 쓰이면, 이는 제네릭 클래스나 제네릭 인터페이스라 함. List 를 말하며, 제네릭 클래스와 제네릭 인터페이스를 제네릭 타입이라고 함. 제네릭 타입은 매개변수화 타입을 정의함. 제네릭을 지원하기 전에는 컬렉션을 직접 선언함 2. 잘못된 코드 private final Collection stamps = ...; 위 코드를 사용하면 다른 타입을 넣어도 오류가 없음. stamps.add(new Coin(...)); coin을 꺼내기 전에는 오류를 뱉지 않음. 3. 올바른 코드 private final Collectiom stamps = '...'; stamps에 Coin 타입을 넣을 경우 incompatible types: Coin cannot be con..

[RN] 카카오톡 로그인 구현하기

리액트 네이티브 버전 : "react-native": "0.69.2" 카카오 로그인 라이브러리 사용하기 1. 라이브러리를 먼저 설치해준다. npm install @react-native-seoul/kakao-login 프로젝트 폴더 안에 ios 폴더로 이동 한 뒤 아래 명령어로 설치 마무리 pod install 2. 카카오 디벨로퍼에서 키 발급 (1) 내 애플리케이션 클릭 (2) 애플리케이션 추가하기 클릭 - 내용 입력 후 저장 - 네이티브 앱 키가 필요하다. 3. 플랫폼 등록 - 나는 iOS 플랫폼만 등록했다. - 번들ID를 잘 등록해야된다....이거 틀린지 모르고 왜 안되지 고민 2일 했다... - 번들ID는 xcode로 프로젝트명.xcworkspace을 실행한다. - 왼쪽 메뉴에서 프로젝트명을 클릭..

[Java] 클래스와 멤버는 접근 권한 최소화하기

1. 개념 - 어설프게 설계된 컴포넌트와 잘 설계된 컴포넌트의 가장 큰 차이는 클래스의 내부 데이터와 내부 구현 정보를 외부 컴포넌트로부터 얼마나 잘 숨겼는지. - 잘 설계된 컴포넌트는 구현과 API를 깔끔히 분리. - API를 통해서만 다른 컴포넌트와 소통하며 서로의 내부 동작 방식에는 전혀 개의치 않음. -> 이는 정보 은닉, 캡슐화 2. 정보 은닉의 장점 시스템 개발 속도를 높임. -> 여러 컴포넌트를 병렬로 개발할 수 있기 때문. 시스템 관리 비용을 낮춤. -> 각 컴포넌트를 더 빨리 파악하여 디버깅 가능하고, 다른 컴포넌트로 교체하는 부담도 적음. 성능 최적화에 도움을 줌. 재사용성을 높여줌. 큰 시스템 제작의 난이도를 낮춰줌. -> 시스템 전체가 완성되지 않은 상태에서도 개별 컴포넌트의 테스트..

[Java] File 입출력

1. 개념 - 파일은 가장 많이 사용되는 입출력 대상 - File 클래스를 통해 파일과 디렉토리를 다룰 수 있음. - window에서 예시 코드 import java.io.*; class FileExample { public static void main(String[] args) throws IOException { File f = new File("경로"); String fileName = f.getName(); int pos = fileName.lastIndexOf("."); System.out.println("경로 제외한 이름 " + f.getName()); System.out.println("확장자 제외한 이름 " + fileName.substring(0, pos)); System.out.pri..

[Java] try-with-resources 사용하기

자바에는 close() 메소드를 사용해 직접 닫아야 하는 자원이 많음. ex) - InputStream - OutputStream - java.sql.Connection ... 이를 방지하기 위해 try-finally가 많이 쓰였다. static String firstLineOfFile(String path) throws IOExceiption { BufferedReader br = new BufferedReader(new FileReader(path)); try { return br.readLine(); } finally { br.close(); } } 사용해야할 자원이 많아지면 static void copy(String src, String dst) throws IOException { InputSt..

[Java] private 생성자로 인스턴스화 막기, 의존 객체 주입 사용하기

1. 인스턴스화 막기 - 단순히 정적 메소드와 정적 필드만을 담은 클래스를 만들 때가 있음 *예시 java.lang.Math java.util.Arrays java.util.Collections final 클래스와 관련된 메소드들을 모을 때. - 정적 멤버만 담은 유틸리티 클래스는 인스턴스로 만들어 쓰려고 설계한 것이 아님. - 생성자를 명시하지 않으면 컴파일러가 자동으로 기본 생성자를 만듦. -> 매개변수가 없는 public 생성자가 만들어짐. -> 사용자는 생성자가 자동 생성된 것인지 아닌지 구분할 수 없음. - 추상 클래스로 만드는 것으로는 인스턴스화를 막을 수 없음. -> 하위 클래스를 만들어 인스턴스화하면 됨. - 이를 막기 위해서는 private 생성자를 추가하면 클래스의 인스턴스화를 막을 수..

[Java] private 생성자나 열거 타입으로 싱글턴 보증하기

- 싱글턴이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말함. - 싱글턴의 예로는 무상태 객체나 설계상 유일해야 하는 시스템 컴포넌트. - 클래스를 싱글턴으로 만들면 테스트가 어려워 질 수 있음. -> 타입을 인터페이스로 정의한 다음 그 인터페이스를 구현해서 만든 싱글턴이 아니라면 싱글턴 인스턴스를 Mock 구현으로 대체할 수 없기 때문. - 싱글턴을 만드는 방식은 2가지. - 두 방식 모두 생성자는 privated으로 생성 - 유일한 인스턴스에 접근할 수 있는 수단으로 public staitic 멤버를 생성해둔다. 1. public static 멤버가 final 필드인 방식 public class Member { public static final Member INSTANCE = new Memb..

디자인 패턴 (4)

1. MVC 패턴 - MVC 패턴은 모델, 뷰, 컨트롤러로 이루어진 디자인 패턴 - 애플리케이션의 구성 요소를 세 가지 역할로 구분하여 개발 프로세스에서 각각의 구성 요소에만 집중해서 개발할 수 있음 - 재사용성과 확장성이 용이하다는 장점 - 애플리케이션이 복잡해질수록 모델과 뷰의 관계가 복잡해지는 단점 - 모델 모델은 애플리케이션의 데이터인 DB, 상수, 변수 등을 말함 - 뷰 1. 뷰는 input, checkbox, textarea 등 사용자 인터페이스 요소를 말함 2. 변경이 일어나면 컨트롤러에 이를 전달 - 컨트롤러 1. 컨트롤러는 하나 이상의 모델과 하나 이상의 뷰를 잇는 다리 역할 2. 이벤트 등 메인 로직 담당 3. 모델과 뷰의 생명주기 관리 4. 모델이나 뷰의 변경 통지를 받으면 이를 해석..

개발/ETC 2023.01.06
728x90