묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[리뉴얼] 타입스크립트 올인원 : Part1. 기본 문법편
interface를 사용할 때 private 사용방법은?
impolements러 interface를 받아 class를 만들때 private이 안되는 오류를 보여주셨는데요interface를 사용하지 않고 그냥 class안에서 type을 지정하는 방법, abstract class를 이용하는 방법 모두 이해됬습니다. 하지만 interface를 사용하면 private, protected 사용이 불가한 것인지 잘 모르겠어서 질문을 올립니다. 구글링해본결과 class내에 속성으로 만들고 getter, setter를 이용하는 것으로 우회하는 방법을 사용하더라구요.(https://stackoverflow.com/questions/37791947/how-to-define-a-private-property-when-implementing-an-interface-in-typescript) 이렇게 했을 때 private의 기능인 class 밖에서는 호출 할 수 없다고 위반되는 결과가 나옵니다. 어떤식으로 해결 해야 할까요? interface Interface { readonly a: string; b: number; } class TSClass implements Interface { private readonly _a: string = "init"; get a() { return this._a; } protected _b: number = 1; get b() { return this._b; } set b(v: number) { this._b = v; } c: string = "기본값이 public"; method() { console.log(this._a); console.log(this._b); console.log(this.c); } } class inheritClass extends TSClass { method() { console.log(this._a); // error console.log(this.a); // 가능.. console.log(this._b); console.log(this.b); console.log(this.c); } } new inheritClass()._a; // error new inheritClass().a; // 가능... new inheritClass()._b; // error new inheritClass().b; // 가능.. new inheritClass().c;
-
해결됨스프링 핵심 원리 - 기본편
@Autowired를 사용하는 setter가 AppConfig를 설정 정보로 갖는 test 클래스에서도 실행 가능한 이유
안녕하세요! 김영한 선생님의 스프링 핵심 원리 강의를 수강하고 있는 학생입니다:)다름 아니라 setter 주입의 예제 코드와 관련하여 궁금한 점이 생겨서 질문을 남기게 되었습니다.강의 13:26에 나와있는 코드와 동일하게 setter와 생성자에 화면 출력 기능을 추가하였습니다. 그 결과, AutoAppConfig.class를 설정 정보로 하는 test 클래스를 실행하면 설명해주신 내용과 같이 생성자를 통한 의존 관계 주입이 먼저 일어나고 setter를 통한 의존 관계 주입이 나중에 일어남을 확인할 수 있었습니다.더 나아가 AutoAppConfig.class가 아닌 AppConfig.class를 설정 정보로 하는 test 클래스를 실행하면 콘솔 화면에 어떤 내용이 출력될지 호기심이 생겨 test.java.hello.core.beanfind 패키지에 위치한 ApplicationContextBasicFindTest 클래스를 실행하였습니다. 실행 전에 저는 orderService라는 이름의 스프링 빈이 등록되는 과정에서 orderServiceImpl() 생성자가 호출되기 때문에 System.out.println("1. OrderServiceImpl.OrderServiceImp"); 코드가 실행될 것이라 예상하였습니다.또한,(1) AppConfig.class엔 setMemberRepository()와 setDiscountPolicy()를 호출하는 코드가 없고 (2) AppConfig.class는 @ComponentScan를 사용하지 않기 때문에 setMemberRepository()와 setDiscountPolicy()가 @Autowired를 사용하고 있더라도 의존 관계를 자동으로 주입할 수 없어 해당 메소드(setter) 내부에 기재되어있는 System.out.println("memberRepository = " + memberRepository); 코드와 System.out.println("discountPolicy = " + discountPolicy); 코드는 실행되지 않을 거라 예상했습니다.하지만 저의 예상과는 다르게 setMemberRepository()와 setDiscountPolicy()가 모두 실행되었고 제가 어느 부분에서 잘못 생각하고 있는지 도움을 구하고자 질문을 남기게 되었습니다.
-
미해결스프링 시큐리티
Entity에 setter 사용 안할시 ModelMapper 설정
수강생분들에게 정보 공유해드리고 싶어서 게시판에 글 남깁니다. ModelMapper를 사용하면 객체에서 객체로 쉽게 변환할 수 있습니다.그런데 Setter를 사용하지 않은 Entity 또는 객체에서 Dto로 변환할 매핑되지 않는 문제가 발생합니다.이를 해결하기 위해서ModelMapper modelMapper = new ModelMapper(); modelMapper.getConfiguration() .setFieldAccessLevel(Configuration.AccessLevel.PRIVATE) .setFieldMatchingEnabled(true); 위와 같이 설정한뒤 사용하면 됩니다.^^ 저는@Bean public ModelMapper modelMapper() { ModelMapper modelMapper = new ModelMapper(); modelMapper.getConfiguration() .setFieldAccessLevel(Configuration.AccessLevel.PRIVATE) .setFieldMatchingEnabled(true); return modelMapper; }빈으로 등록해서 사용했습니다.ㅎㅎ InheritingConfiguration 클래스에서 ModelMapper 기본 fieldAccessLevel이 fieldAccessLevel = AccessLevel.PUBLIC; 임을 확인 할 수 있습니다.^^public class InheritingConfiguration implements Configuration { //...// /** * Creates an initial InheritingConfiguration. */ public InheritingConfiguration() { parent = null; typeMapStore = new TypeMapStore(this); converterStore = new ConverterStore(); valueAccessStore = new ValueAccessStore(); valueMutateStore = new ValueMutateStore(); sourceNameTokenizer = NameTokenizers.CAMEL_CASE; destinationNameTokenizer = NameTokenizers.CAMEL_CASE; sourceNamingConvention = NamingConventions.JAVABEANS_ACCESSOR; destinationNamingConvention = NamingConventions.JAVABEANS_MUTATOR; sourceNameTransformer = NameTransformers.JAVABEANS_ACCESSOR; destinationNameTransformer = NameTransformers.JAVABEANS_MUTATOR; matchingStrategy = MatchingStrategies.STANDARD; fieldAccessLevel = AccessLevel.PUBLIC; methodAccessLevel = AccessLevel.PUBLIC; fieldMatchingEnabled = Boolean.FALSE; ambiguityIgnored = Boolean.FALSE; fullTypeMatchingRequired = Boolean.FALSE; implicitMatchingEnabled = Boolean.TRUE; preferNestedProperties = Boolean.TRUE; skipNullEnabled = Boolean.FALSE; useOSGiClassLoaderBridging = Boolean.FALSE; collectionsMergeEnabled = Boolean.FALSE; } //...// } 참고하세용^^
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
클래스 내부에서 getter/setter 메서드 사용
안녕하세요. 영한님과 서포터님들 덕분에 즐겁게 공부하고 있습니다.주문, 주문상품 엔티티 개발 강의를 듣던 중 궁금한 것이 생겼습니다. 강의에서 보시면 클래스 내부에서 생성 메서드 혹은 비즈니스 로직 메서드를 구현하시면서 getter/setter 메서드를 사용하시는데요.이렇게 클래스 내부에서 사용할 때도 필드에 직접 접근하는 것보다는 getter/setter 메서드를 사용하는 것이 권장되는가요?단순히 생각했을 때는 불필요한 메서드 호출만 일어나는 것 아닌가해서 질문드립니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
setter없이 생성메서드 생성하는 방법
안녕하세요 강사님, 서포터즈님들 JPA 실전까지 모두 완강하고 개인 프로젝트를 진행 중입니다. 강사님께서 강의 때 setter의 사용을 지양하라고 하셨는데, 생성메서드 생성 시 setter를 사용하지 않고 제가 짠 코드대로 해도 문제가 없을까요? --------- 생각해보니까 이것도 setter를 사용한거나 다름 없는 것 같은데, 생성메서드 생성할 때 setter없이 하는 방법이 있나요? @Id @GeneratedValue @Column(name = "fileId") private Long id; private String fileNm; private String path; private Long size; private String extension; private String fileType; @JoinColumn(name = "restaurantId") @OneToOne(fetch = FetchType.LAZY) private Restaurant restaurant; @JoinColumn(name = "menuId") @OneToOne(fetch = FetchType.LAZY) private Menu menu; //생성메서드 public static FileEntity createFile(FileEntity fileInfo) { FileEntity file = new FileEntity(); file.setFile(fileInfo.getFileNm(), fileInfo.getPath(), fileInfo.getSize(), fileInfo.getExtension(), fileInfo.getFileType()); return file; } public void setFile(String fileNm, String path, Long size, String extension, String fileType) { this.fileNm = fileNm; this.path = path; this.size = size; this.extension = extension; this.fileType = fileType; }
-
미해결스프링 핵심 원리 - 기본편
수정자 주입이 아닌 생성자 주입을 해야하는 이유에 대하여
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용] 안녕하세요 제목 그대로 수정자 주입이 아닌, 생성자 주입을 해야하는 이유에 대한 설명 중 이해가지 않는 부분이 있어서 질문드립니다 ppt에 "수정자 주입을 사용하면, setXxx 메서드를 public으로 열어두어야 한다. " 라는 근거가 있는데요. setter는 반드시 public으로 열어야하는 것 아닌가요? , public이 아닌 접근제어자로 setter를 작성하는 경우도 있나요? 그래서 전 이 부분을 수정자 주입을 위해선 setter가 필요없는, 혹은 변경될 위험이 있어서 getter만 작성하고 setter를 작성하지 않는 클래스에도 setter를 포함해야한다. 라고 이해하였는데 이게 의도하신 의미일까요?