프로그래밍
-
[파이썬🐍] 얕은 복사 vs 깊은 복사프로그래밍/Python 2022. 7. 27. 17:06
얕은 복사 VS 깊은 복사 코딩테스트 문제를 풀던 도중 문제가 발생했다. for i in range(len(nums)): n = nums n.pop(i) result.append(math.prod(n)) 나의 의도는 n이 매번 '온전한' nums를 할당받는 것! 그런데 인덱스 에러가 발생했다? # 프린트를 찍어봄 nums: [2, 3, 4] n: [2, 3, 4] nums: [2, 4] n: [2, 4] 오잉? 이럴수가! nums는 왜 변하는가 nums는 건드리지도 않았는데 말이지 그 이유는 '얕은 복사'를 했기 때문이었다. 얕은 복사란 무엇인가? 그걸 알기 위해선 먼저 mutable과 immutable의 개념부터 알아야 한다. 1. Mutable과 Immutable Mutable : 변경이 가능한 객체..
-
[🙌 CSS] 예쁜 글씨체 적용하기 (CSS 폰트적용, 구글 폰트 활용)프로그래밍/HTML&CSS 2022. 7. 9. 14:50
신문지 컨셉으로 웹 페이지를 만들려고 한다. 밑에 사진과 같이 구성을 했는데 제목 폰트가 밋밋해서 신문지 느낌이 살지 않는다! 신문지 컨셉을 명확히 하기 위해 예쁜 폰트를 적용해보자 1. 구글 폰트에 들어간다 https://fonts.google.com/ Google Fonts Making the web more beautiful, fast, and open through great typography fonts.google.com 2. 원하는 폰트를 클릭한다 3. 오른쪽에 [Select this style +] 버튼을 누른다. 그럼 다음과 같은 바가 열린다. (안뜰 경우 분홍색으로 동그라미 친 버튼 클릭) 4. @Import란에 태그 속 문장을 복사한 뒤 css 파일 맨 위에 붙여넣기 한다. (css ..
-
[Node.js, MongoDB] Schema와 Model프로그래밍/Node.js 2022. 3. 28. 19:40
Schema 종류 특징 type String, Number 등 Column의 타입을 지정한다. maxlength 최대 길이 minlength 최소 길이 trim 공백 제거 unique 중복 허용 여부 default 아무 값이 없을 경우 설정할 값 required 필수값 여부 lowercase 소문자로 바꿔준다 uppercase 대문자로 바꿔준다 index 보조 색인 match 패턴이 같지 않으면 저장 x Model 스키마를 감싸고 있는 틀을 의미한다. const mongoose = require('mongoose'); // 스키마 작성 const userSchema = mongoose.Schema({ name: { type: String, maxlength: 50 }, email: { type: Stri..
-
[JPA] 상속관계 매핑프로그래밍/Java 2022. 2. 15. 13:16
상속관계 매핑 객체의 상속의 구조와 DB의 슈퍼타입 서브타입 관계를 매핑 전략 1. 조인 전략 각 테이블로 변환 각각 조인해서 사용 DTYPE으로 구분 2. 단일 테이블 전략 한 테이블로 합쳐서 사용 DTYPE으로 구분 3. 구현 클래스마다 테이블 전략 상위 테이블 없이 슈퍼타입 컬럼을 서브타입 애들이 다 갖고 있음 - extends 사용시 JPA 기본전략은 단일테이블 전략 - 상위 테이블을 추상 클래스로 만들 것 어노테이션 사용 @Inheritance - strategy를 이용하여 전략 선택 가능 @Inheritance(strategy = InheritanceType.JOINED) // 조인전략 @Inheritance(strategy = InheritanceType.SINGLE_TABLE) // 단일 ..
-
[JavaScript] 변수 호이스팅이란 무엇인가?프로그래밍/JavaScript 2022. 2. 14. 17:10
변수 호이스팅 변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트의 특징 보통 우리는 코드를 짤 때 변수를 먼저 선언하고 -> 그 변수를 이용한 로직을 짠다. 만약 반대로 짠다면 해당 변수가 없단느 에러가 뜰 것이다 var score; // 변수 선언 console.log(score); // 변수 사용 그러나 자바스크립트는 그 반대!도 동작한다 console.log(score); var score;// 후 선언! // undefined 그 이유는 변수 선언이 코드가 순차적으로 실행되는 시점(런타임)이 아니라 그 이전 단계에서 먼저 실행되기 때문이다! 이런 것처럼 변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트 고유의 특징을 변수 호이스팅이라 한다! 그렇다면! con..
-
[JPA] 연관관계(1:N) 매핑하기프로그래밍/Java 2022. 2. 10. 09:52
연관관계 매핑 (1:N) 외래키가 있는 곳이 주인이다! Team과 Member가 1대다 관계일 때, Member 테이블이 연관관계의 주인이다. (Many To One 중 Many가 연관관계의 주인이다.) 연관관계의 주인은 비즈니스적으로 중요하지 않다. => N이 그냥 주인이 되는 것. 양방향 매핑시 연관관계의 주인에는 꼭! 값을 세팅해야함. // XXXXX Team.getMembers().add(member); // OOOOO member.setTeam(team); 객체지향적으로 보면 양 쪽에 값을 세팅해주는게 맞다. Team.getMembers().add(member); member.setTeam(team); - 연관관계 편의 메소드를 생성하자 // 로직이 들어가면 메소드명을 changeTeam 등으로..
-
[JPA] 지연로딩 & 즉시로딩프로그래밍/Java 2022. 1. 21. 14:17
지연 로딩 객체가 실제 사용될 때 로딩 Member member = meberDAO.find(memberId); // select * from member Team team = member.getTeam(); String teamName = team.getName(); // select * from team 객체가 실제 사용될 때 로딩 필요할 때마다 쿼리문을 이용해 호출 즉시 로딩 (최적화) JOIN SQL로 한번에 연관된 객체까지 미리 조회 Member member = meberDAO.find(memberId); // select m.*, t.* from member join team.. Team team = member.getTeam(); String teamName = team.getName(); ..
-
[객체지향] 좋은 객체 지향 설계의 원칙 - SRP, DIP, OCP프로그래밍/Spring & Springboot 2022. 1. 6. 10:50
좋은 객체 지향 설계의 원칙 SRP 한 클래스는 하나의 책임만 가져야 한다. 클라이언트 객체는 직접 구현 객체를 생성하고, 연결하고, 실행하는 다양한 책임을 가지고 있음 SRP 단일 책임 원칙을 따르면서 관심사를 분리함 구현 객체를 생성하고 연결하는 책임은 AppConfig가 담당 클라이언트 객체는 실행하는 책임만 담당 DIP 의존관계 역전 원칙 프로그래머는 추상화에 의존해야지 구체화에 의존하면 안된다. 의존성 주입은 이 원칙을 따르는 방법 중 하나다. 새로운 할인 정책을 개발하고 적용하려고 하니 클라이언트 코드도 함께 변경해야 했다. ORDER SERVICE IMPLE은 DIP를 지키며 DISCOUNT POLICY 추상화 인터페이스에 의존한느 것같았지만, FIX DISOCUNT POLICY 구체화 구현..