abstract클래스의 인스턴스 생성
미해결
김영한의 실전 자바 - 기본편
[질문 내용] 안녕하세요! 궁금한게 있어서 질문을 남깁니다. 자식클래스로부터 인스턴스가 생성되면 부모클래스의 인스턴스도 함께 생성되는 것으로 공부하였습니다. 추상 클래스는 실체인 인스턴스가 존재하지 않는다고 하였는데, 추상 클래스를 상속 받은 자식 클래스로부터 인스턴스를 생성하면 왜 추상클래스 인스턴스도 함께 생성되는 것인가요?
- java
- 객체지향
172만명의 커뮤니티!! 함께 토론해봐요.
미해결
김영한의 실전 자바 - 기본편
[질문 내용] 안녕하세요! 궁금한게 있어서 질문을 남깁니다. 자식클래스로부터 인스턴스가 생성되면 부모클래스의 인스턴스도 함께 생성되는 것으로 공부하였습니다. 추상 클래스는 실체인 인스턴스가 존재하지 않는다고 하였는데, 추상 클래스를 상속 받은 자식 클래스로부터 인스턴스를 생성하면 왜 추상클래스 인스턴스도 함께 생성되는 것인가요?
미해결
재고시스템으로 알아보는 동시성이슈 해결방법
하다가 안돼서 깃허브 소스 복붙하고 돌려도 테스트가 실패해요.
미해결
김영한의 실전 자바 - 기본편
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요. 메인클래스 실행 시 사진과 같이 한글이 깨져서 나옵니다. 구글링 해서 나온 방법대로 해봐도 안돼서 질문 드립니다. 수정할 때마다 인텔리제이 재접속도 해봤습니다. 혹시 몰라 수업자료 받은 파일도 실행해봤는데 똑같이 깨져서 나왔습니다.
미해결
스프링 웹 MVC
안녕하세요 기선님! 기선님의 스프링 강좌 재탕하고 있습니다. 7:58 부분에 스프링의 테스트 코드 예제는 보통 어떻게 검색하여 찾으시는건가요? 그냥 깃허브에서 검색하셨는지 꿀팁이 있다면 알려주시면 감사하겠습니다.!
미해결
김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. package array; import java.util.Scanner; public class ArrayEx10_1 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String[] productName = new String[10]; int[] productPrice = new int[10]; int productCount = 0; while (true) { System.out.println("1. 상품 등록 | 2. 상품 삭제 | 3. 상품 목록 | 4. 종료\n메뉴를 선택하세요." ); String options = scanner.nextLine(); if (options.equals("1") && productCount < 10) { System.out.print("상품 이름을 입력하세요: "); productName[productCount] =scanner.nextLine(); System.out.print("상품 가격을 입력하세요: "); productPrice[productCount] =scanner.nextInt(); productCount++; scanner.nextLine(); } else if (options.equals("1") && productCount == 10) { System.out.println("더 이상 상품을 동록할 수 없습니다."); } else if (options.equals("2") && productCount > 0) { for (int i = 0; i < productCount; i++) { System.out.println((i+1) + ". "+ productName[i] + ": " + productPrice[i] + "원"); } System.out.println("삭제할 품목의 번호를 입력해주세요."); int delNum = scanner.nextInt(); if ((delNum-1) < productCount) { productName[delNum-1] = null; productPrice[delNum-1] = 0; productCount--; System.out.println(delNum + "번 품목이 삭제되었습니다."); scanner.nextLine(); } else { System.out.println("올바른 품목의 번호를 입력해주세요."); scanner.nextLine(); } } else if (options.equals("2") && productCount == 0) { System.out.println("삭제할 품목이 없습니다."); } else if (options.equals("3") && productCount > 0) { for (int i = 0; i < productCount; i++) { System.out.println((i+1) + ". "+ productName[i] + ": " + productPrice[i] + "원"); } } else if (options.equals("3") && productCount == 0) { System.out.println("등록된 상풍이 없습니다."); } else if (options.equals("4")) { System.out.println("프로그램을 종료합니다."); break; } else { System.out.println("올바른 메뉴를 선택해주세요."); } } } } 실습을 하다가 삭제기능도 있었으면 해서 만들어 봤습니다.우선, 강의를 봤을 때와 조금 다르게 만든거 같구요. 메뉴를 선택할 때 글자를 넣으면 오류가 떠서 스트링형으로 바꿨습니다. 위 코드에서 가독성 측면이나 중복 등 피드백 가능하실까요...?또 추가로 강사님이었으면 어떻게 하셨을 것 같나요??
해결됨
맛집 지도앱 만들기 (React Native & NestJS)
npx react-native@latest init MatzipApp npx: 541개의 패키지를 19.389초만에 설치했습니다. Unexpected token ? 프로젝트 ruby 버전을 변경하고 프로젝트 npx 설치하는데 해당 오류로 인해 프로젝트 폴더가 생기지 않네요 혹시 해결법이 어떤것일까요? 검색해봐도 나오질 않네요
미해결
스프링과 JPA 기반 웹 애플리케이션 개발
public void login(Account account) { System.out.println(account); UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(account.getNickname(), account.getPassword(), Collections.singleton(new SimpleGrantedAuthority("ROLE_USER"))); SecurityContextHolder.getContext().setAuthentication(token); } 우선 AccountService에 있는 login입니다. 제가 테스트를 하던 도중 나머지는 다 되는데 authetication부분에서 문제가 있는것을 발견했습니다. 단위테스트로 하다보니 권한이 부여가 되지 않아서 회원가입을 해도 다시 원상태로 복구되더군요 springsecurity6로 바뀌면서 새로 바뀐부분이 있길래 구글링해서 바꿀만큼 바꿔보고 찾을만큼 찾아봤다 생각했는데도 자꾸 권한부여 부분에서 문제가 생깁니다(위의 login함수) 이럴경우 어떻게 바꾸어야 할까요...? 저 위에 SecurityContextHolder.getContext().setAuthentication(token); 라는 코드전에 토큰을 출력해 보니 UsernamePasswordAuthenticationToken [Principal=jungsik, Credentials=[PROTECTED], Authenticated=true, Details=null, Granted Authorities=[ROLE_USER]] 이렇듯 AUtheticated는 true로 반환되는데 redirect될때는 권한이 사라지는것 같습니다
미해결
핸즈온 리액트 네이티브
안녕하세요, 사진 앱 외에 제가 원하는 앱을 구현하기 위해 강의를 많이 참고하고 있습니다! 하단탭을 사용하는 것까지는 강의와 동일합니다만, 홈 화면에서만 상단탭 을 사용하려고 하고 있습니다. React Navigation 의 Material Top Tab Navigator 를 사용했고, 그 과정에서 StatusBar 배경색이 회색 으로 변경되어버렸습니다 ㅠㅠ... 아무리 배경 색을 바꾸어도 변경이 되지 않고 있는 상황입니다. (Android는 된 것으로 알고 있는데, iOS에서 계속해서 회색 배경으로 보입니다) 그리고 상단탭 하단의 리스트는 FlatList 를 사용하였는데, 데이터 양이 적을 때에도 남은 배경색이 회색으로 보입니다 ㅠㅠ 처음에는 상단탭 아래쪽 화면( BoatListScreen ) 부분에 flex:1 을 줘서 배경색을 늘려보았지만, 그렇게 하니 상단탭 아래에 있는 ScrollView (시흥 등 버튼이 있는)에 적용했던 높이값이 이상해져서 세로로 늘어나게 되어버리는 현상이 발생합니다. HomeScreen 에서 TopTab을 바로 불러오게 했는데 이게 문제인걸까요? ㅠㅠ 강의 내용과는 좀 다른 부분이긴 하지만 한번 질문드려봅니다..!!
미해결
배달앱 클론코딩 [with React Native]
안녕하세요. 강의를 보고 앱을 개발하고 이제 배포전 QA단계까지 왔습니다! QA를 하기위해서 Xcode에서 Edit Schemes -> Run에서 디버그 모드랑 릴리즈 모드로 선택을해서 빌드를 할 수가 있는데... 디버그모드로 빌드를 하면 제가 수정한 코드가 잘 반영이 되어있는데 릴리즈 모드로 빌드를 하면 변한게 없습니다! 뭐가 다른 설정이 또 필요한 부분이 있나요? 혹시몰라서 깃 커밋과 푸시는 다 한 상태로 진행도 해보고 캐시도 삭 날려도 보고 했습니다.
미해결
배달앱 클론코딩 [with React Native]
앱 어플에 대한 백엔드 서버는 그냥 웹과 동일하게 NestJS같은 것으로 만들면 되나요?
해결됨
김영한의 실전 자바 - 기본편
public class DecoData { private int instanceValue; private static int staticValue; public static void staticCall() { System.out.println(this.instanceValue); } .... } 안녕하세요! 강의에서 "static 영역 입장에서 힙 영역에 있는 인스턴스의 참조값을 몰라서 인스턴스 변수에 접근할 수 없다." 라고 얘기를 해주셨는데 그러면 this는 클래스 본인의 인스턴스 참조값이니 이 this를 이용하면 static 메서드에서도 인스턴스 변수에 접근할 수 있지 않을까? 라는 생각을 해서 코드를 짰는데 오류가 났습니다. 왜 static 메서드 영역에서 this를 사용해도 인스턴스 변수에 접근할 수 없나요? 감사합니다.
해결됨
실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
안녕하세요 강사님 덕분에 편히 배우고 있습니다. 다름이 아니라 이번 강의 초반에 @Transactional 어노테이션을 사용할 시 open 키워드를 클래스와 매서드에 다 사용해주어야 하고, 만약 이게 싫다면 플러그인을 적용해야 한다고 말씀하셨는데요, 찾아보니 코틀린에서는 기본적으로 모든 클래스가 최종 클래스고, 그렇기 때문에 상속이 되지 않아 open 키워드를 사용해 상속 가능성을 열어두어야 한다는 것 같더라구요. 그런데 왜 이게 @Transactional 어노테이션을 사용할 때도 해당되는 내용인지 잘 모르겠습니다. 프록시 객체가 생성되기 때문인 걸까요? 제가 코틀린 기본 강의를 들었음에도 잘 기억이 나질 않아 질문드립니다. 항상 감사드립니다.
미해결
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
똑같은 이름의 책 등록을 막기 위해서는 스프링 부트의 멀티스레드 구조와 단일 인스턴스 - 서버가 1대인 경우 - 일 때의 synchronized 구문, 멀티 인스턴스 - 서버가 N>=2 대 인경우 - 일 때의 DB unique key 등을 언급해야 하고, (이 과정에서 서버의 인프라도 설명이 들어갑니다!) 동시 대출을 방어하기 위해서는 DB의 Lock(잠금) 종류와 원리에 대해 설명해야 합니다. 이렇게 답변주셨는데 대용량 트래픽 개인프로젝트를 설계한다고 해야한다면 서버를 여러대 생각을 하고 DB unique key를 생각을 해야할지 먼저 서버 1대를 생각하고 synchronized 구문으로 똑같은 이름의 책 등록을 막아야할지 고민입니다.!!
미해결
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
비즈니스 요구사항,기술적인 요구사항,도메인 아키텍처 등 여러 부분을 고민해서 연관관계를 사용을 선택해야한다고 하셨고 도메인을 설계할 때 이거는 이렇게 하니까 이렇게 하자 저거는 저렇기 때문에 저렇게하자라고 하셨습니다. 실례가 될수 있지만 강사님께서는 어떻게하시는지 예시를 좀 들어주실수 있을까요..? 개인프로젝트할때 도움이 될것같습니다!!!
미해결
김영한의 실전 자바 - 기본편
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 패키지 import를 할때 import는 하나만 할 수 있다고 하셨는데 a패키지와 b패키지에 클래스명이 User로 같아서 하나만 할 수 있다는건가요? 직접해보니까 c라는 패키지를 만들어서 클래스명을 User로 안하니까 import가 되더라고요 만약 그렇다면 강의에서 보통 자주쓰는 패키지를 임포트하고 다른 패키지는 풀네임으로 쓴다고 하셨는데 그냥 클래스명만 조금 바꾸고 둘다 임포트해서 쓰는게 더 낫지 않나요?
해결됨
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 생성메서드의 용도가 갑자기 까먹었는데 그냥 생성자로 넣어주려는걸로 아는데 Static으로 정적으로 왜쓰는건가요? Static 빼면 안되나요?
미해결
김영한의 실전 자바 - 기본편
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 강의에서는 21버전 Oracle OpenJDK를 사용하라고 하셨는데 제 화면에는 (21버전) OracleGraalVM 만 뜨는데 이걸로 사용해도 무방한가요? 상관없어보이지만 혹시나 해서 궁금한 마음에 여쭤봅니다!
해결됨
김영한의 실전 자바 - 기본편
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 안녕하세요. 강의 잘 듣고 있습니다. 해당 강의에서 부모 클래스인 Item의 생성자 및 print(), getPrice()메서드에 대한 접근제어자를 public으로 설정하셨습니다. 제 생각에는 ShopMain 클래스에서 부모 클래스에 접근할 때에는 모두 Item의 자식(book, album, movie)을 통해서만 접근하는 상황이고 이러한 접근 방식이 옳다고 판단되어서 부모 클래스의 생성자 및 메서드의 접근 제어자를 protected로 설정하였습니다(당연하게도 해당 예제에서 실행 결과는 public으로 했을 때와 동일합니다). 이 경우에 언젠가는 자식 클래스를 통해 접근하지 않을 경우가 발생할 수 있기 때문에 public으로 설정을 하신 걸까요? 아니면 protected로 설정하는 것이 조금 더 논리에 맞는 걸까요? package extends1.ex; public class Item { private String name; private int price; protected Item(String name, int price) { this.name = name; this.price = price; } protected void print() { //이름과 가격은 모든 자식에서 동일하게 수행하는 기능이므로 부모에 구현 System.out.println("이름:" + name + ", 가격:" + price); } protected int getPrice() { return price; } }
해결됨
배달앱 클론코딩 [with React Native]
안녕하세요 아래 코드의 bottomSheet 내부에 채팅 창을 넣고자 합니다.. 그리고 카톡에서 키보드가 올라오면 보던 내용이 키보드를 피해 올라가는 것을 구현하고자 하고 있습니다. 아래 코드에서 BottomSheet 내부를 KeyboardAvodingView로 감싸주었을 떄는 내부 scroll이 동작을 안 하였습니다.. FlatList만 KeyboardAvoidingView를 사용하였을 때는 .. FlatList의 내용이 가린채로 키보드가 올라왔습니다.. KeyboardAwareScrollview또한 내부 스크롤이 동작안하고 있었습니다.. 혹시 아래처럼 bottomSheet를 사용해 내부 요소들을 보여줄 때 보던 내용이 키보드가 올라와도 보여질 수 있도록 자동으로 밀려올라가는(스크롤되는,,) 방법이 없을까요? 감사합니다.. import React, { useCallback, useRef, useMemo } from "react"; import { StyleSheet, View, Text, Button, KeyboardAvoidingView } from "react-native"; import BottomSheet, { BottomSheetFlatList } from "@gorhom/bottom-sheet"; import { FlatList, ScrollView, TextInput } from "react-native-gesture-handler"; import { KeyboardAwareFlatList, KeyboardAwareScrollView } from "react-native-keyboard-aware-scroll-view"; const BottomExample = () => { // hooks const sheetRef = useRef<BottomSheet>(null); // variables const data = useMemo( () => Array(50) .fill(0) .map((_, index) => `index-${index}`), [] ); const snapPoints = useMemo(() => ["25%", "50%", "100%"], []); // callbacks const handleSheetChange = useCallback((index: any) => { console.log("handleSheetChange", index); }, []); const handleSnapPress = useCallback((index: any) => { sheetRef.current?.snapToIndex(index); }, []); const handleClosePress = useCallback(() => { sheetRef.current?.close(); }, []); // render const renderItem = useCallback( ( {item} : { item : string } ) => ( <View style={styles.itemContainer}> <Text>{item}</Text> </View> ), [] ); return ( <View style={styles.container}> <Button title="Snap To 90%" onPress={() => handleSnapPress(2)} /> <Button title="Snap To 50%" onPress={() => handleSnapPress(1)} /> <Button title="Snap To 25%" onPress={() => handleSnapPress(0)} /> <Button title="Close" onPress={() => handleClosePress()} /> <BottomSheet ref={sheetRef} snapPoints={snapPoints} onChange={handleSheetChange} > <FlatList data={data} keyExtractor={(i) => i} renderItem={renderItem} contentContainerStyle={styles.contentContainer} /> < style ={{ backgroundColor : "blue"}}>all good all fine</TextInput> </BottomSheet> </View> ); }; const styles = StyleSheet.create({ container: { flex: 1, paddingTop: 200, }, contentContainer: { backgroundColor: "white", }, itemContainer: { padding: 6, margin: 6, backgroundColor: "#eee", }, }); export default BottomExample;
미해결
핸즈온 리액트 네이티브
안녕하세요, 8.17 코드를 그대로 따라갔는데 마지막에 앱을 새로고침하면 이미지가 아예 안 뜹니다. (첨부 이미지 참고) 에러 메세지도 따로 없고, 그냥 이미지가 뜨지 않습니다. source.uri에는 firebase 스토리지에 올린 기본 프로필 이미지 링크가 들어있는 것을 확인했습니다. 코드는 github 까지 비교해가며 봤는데 동일합니다. 혹시 몰라 FastImage.js 및 ProfileScreen.js 코드 전문 첨부합니다. 무엇이 문제일까요..?ㅠ 그동안 라이브러리가 업데이트 된걸까요? FastImage.js import { Image } from 'react-native'; import PropTypes from 'prop-types'; import { useEffect, useState } from 'react'; import * as Crypto from 'expo-crypto'; import * as FileSystem from 'expo-file-system'; const FastImage = ({ source, ...props }) => { const [uri, setUri] = useState(source.uri); useEffect(() => { (async () => { try { console.log('source.uri', source.uri); const hashed = await Crypto.digestStringAsync( Crypto.CryptoDigestAlgorithm.SHA256, source.uri ); // Hash the URL const fileSystemUri = `${FileSystem.cacheDirectory}${hashed}`; // Create a file path const metadata = await FileSystem.getInfoAsync(fileSystemUri); // Check if the file exists if (!metadata.exists) { await FileSystem.downloadAsync(source.uri, fileSystemUri); // Download the file } setUri(fileSystemUri); // Set the file path } catch (error) { setUri(source.uri); } })(); }, [source.uri]); return <Image source={{ uri }} {...props} />; }; FastImage.propTypes = { source: PropTypes.object.isRequired, }; export default FastImage; ProfileScreen.js import { StyleSheet, Text, View, Pressable } from 'react-native'; import PropTypes from 'prop-types'; import { useUserState } from '../context/UserContext'; import { signOut } from '../api/auth'; import { GRAY, WHITE } from '../colors'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; import { MaterialIcons } from '@expo/vector-icons'; import { MaterialCommunityIcons } from '@expo/vector-icons'; import FastImage from '../components/FastImage'; const ProfileScreen = () => { const [user, setUser] = useUserState(); // [user, setUser] const { top } = useSafeAreaInsets(); return ( <View style={[styles.container, { paddingTop: top }]}> <View style={styles.settingButton}> <Pressable onPress={async () => { await signOut(); setUser({}); }} hitSlop={10} > <MaterialIcons name="logout" size={24} color={GRAY.DEFAULT} /> </Pressable> </View> <View style={styles.profile}> <View style={[ styles.photo, user.photoURL || { backgroundColor: GRAY.DEFAULT }, ]} > <FastImage source={{ uri: user.photoURL }} style={styles.photo} /> <Pressable style={styles.editButton} onPress={() => {}}> <MaterialCommunityIcons name="pencil" size={20} color={WHITE} /> </Pressable> </View> <Text style={styles.nickname}>{user.displayName || '닉네임'}</Text> <Text style={styles.email}>{user.email}</Text> </View> <View style={styles.listContainer}> <Text style={styles.listText}>설정 리스트?</Text> </View> </View> ); }; ProfileScreen.propTypes = {}; const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: WHITE, }, settingButton: { alignItems: 'flex-end', paddingHorizontal: 20, }, profile: { justifyContent: 'center', alignItems: 'center', borderBottomWidth: 0.5, borderBottomColor: GRAY.DEFAULT, paddingVertical: 20, }, photo: { width: 100, height: 100, borderRadius: 50, }, editButton: { position: 'absolute', bottom: 0, right: 0, width: 30, height: 30, borderRadius: 15, backgroundColor: GRAY.DARK, justifyContent: 'center', alignItems: 'center', }, nickname: { fontSize: 24, fontWeight: '600', marginTop: 20, }, email: { fontSize: 15, // fontWeight: '600', color: GRAY.DARK, marginTop: 5, }, listContainer: { flex: 1, alignItems: 'center', }, listText: { fontSize: 20, fontWeight: '600', marginVertical: 20, marginHorizontal: 20, }, }); export default ProfileScreen;