목록분류 전체보기 (200)
사이먼's 코딩노트
이번에 모작해볼 홈페이지는 올리브영입니다. 모작의 범위는 3차메뉴와 제품소개 까지이며, 마찬가지로 단계를 나눠서 진행하겠습니다. 완성 디자인 1단계 : 그리드 및 레이아웃 잡기 상단 탑바는 1차적으로 위, 아래 부분으로 나누고 윗부분에는 유저메뉴, 아래부분에는 로고, 검색창, 매장소식 메뉴를 배치하도록 레이아웃을 구성하였다. 2단계 : 유저메뉴 제작 3단계 : 로고 커스텀 올리브영 로고는 해당 홈페이지의 개발자모드(F12)를 통해 이미지를 가져와 코드에 적용했고, img 태그의 너비 높이를 100%로 맞춰 커스텀해줬다. 4단계 : 검색창 및 매장소식 제작 5단계 : 1차메뉴 제작 6단계 : 2차메뉴 제작 2차메뉴는 position: absolute를 사용하지 않고 가장 하단에 태그를 추가해서 제작하였다...
클래스와 메서드 그리고 상속을 통한 문제를 요구사항에 맞춰서 풀어보자. [문제] 문제 : 다음 요구사항에 맞는 클래스와 메서드를 생성해보세요. 요구사항 1 : 오리 생성하고 날아가는 능력을 부여하세요. 요구사항 2 : 청둥오리와 흰오리를 생성하고 날아가는 능력을 부여하세요. 요구사항 3 : 오리 계열(오리, 청둥오리, 흰오리)의 클래스에 '날다' 메서드가 중복되지 않도록 하세요. 요구사항 4 : 고무오리를 생성하고 날아가는 능력을 부여하세요. 요구사항 5 : 고무오리 계열에게 날아가는 능력을 뺏어주세요. 요구사항 6 : 고무2오리를 추가 생성해주세요. 요구사항 7 : 고무오리 계열의 클래스에 '날다' 메서드가 중복되지 않도록 하세요. 요구사항 8 : 로봇오리를 생성하여 오리계열과 고무오리계열의 능력을 반..
[포인터를 사용하는 이유] 변수는 본질적으로 공간이다. 공간은 본질적으로 옮길 수가 없다. 그렇게 때문에 어떤 변수에 있는 값을 누군가에게 공유할 때는 주소(포인터)를 사용할 수 밖에 없다. 주소가 바로 포인터이다. 주소를 담는 변수는 포인터 변수라고 한다. [2중 포인터] 2중 포인터는 말그대로 주소를 2번 옮겨서 어떤 변수의 있는 값을 공유하는 것이다. 아래는 2중포인터를 활용하여 change라는 함수를 통해 기존에 있던 값을 바꾸는 코드이다. #include void change(int** num) { **num = 50; } int main(void) { int x = 20; int* p = &x; printf("change 함수 호출하기 전의 x : %d\n", x); change(&p); pr..
[상속] Java는 객체지향 프로그램이다. Java와 같이 객체지향 프로그램은 최대한 중복을 없애는 것을 선호하는 편이다. 서로 다른 클래스가 같은 기능을 하는 메서드를 실행하는 것은 매우 비효율적인 일이라고 판단한다. 같은 계열의 클래스 즉, 비슷한 역할을 하는 설계도가 있다면 해당 설계도는 서로 상속하고 상속받는 역할을 하는 것이 좋다. 아래는 클래스끼리 상속받는 모습을 작성한 코드이다. public class Main { public static void main(String[] args) { 사람 a사람 = new 사람(); a사람.숨쉬다(); } } class 동물 { static void 숨쉬다() { System.out.println("숨쉬다."); } } class 사람 extends 동물..
[클래스와 메서드 2] 아래는 게임 참여자와 무기라는 클래스를 지정하여 속성을 부여하는 코드이다. public class Main { public static void main(String[] args) { Player p1 = new Player(); p1.name = "홍길동"; Weapon sword = new Weapon(); sword.type = "칼"; sword.damage = 1; p1.weapon = sword; Weapon bow = new Weapon(); bow.type = "활"; bow.damage = 2; Player p2 = new Player(); p2.name = "홍길순"; p2.weapon = bow; System.out.println(p2.weapon.type); ..
이번엔 포인터와 관련된 문제들을 풀어봅시다. 각 문제에는 문제와 조건이 있으니 해당 조건에 맞춰서 문제를 해결해봅시다. [문제 1] 변수 i의 값을 해킹해주세요. 조건 1 : i의 값을 직접 바꾸는 것은 안됩니다. 조건 2 : `i = 50;` 은 안됩니다. #include // 8바이트 int main(void) { int i = 30; int i2 = 30; int* p = &i; printf("p의 주소값 : %ld\n", (long)p); printf("포인터 p의 값 : %d\n", *p); *p = 50; printf("i : %d\n", i); // 출력 => i : 50 return 0; } 변수 i를 직접적인 수정말고 포인터를 이용해서 값을 바꿔야한다. 포인터 변수 p를 생성하여 i의 주..
[포인터] [컴퓨터의 구성] 1. CPU : 연산 기능 데이터 처리속도 : 매우 빠름 Read / Write 속도 : 매우 빠름 2. L1 Cache(캐시) 메모리 : 저장 기능 저장용량 : 작음 (보통 8 ~ 64KB) Read / Write 속도 : 매우 빠름 (L2보다 빠름) 3. L2 Cache 메모리 : 저장 기능 저장 용량 : 작음 (보통 64KB ~ 4MB) Read / Wrtie 속도 : 매우 빠름 4. 메모리 : 저장 기능 저장 용량 : 작음 (8GB) Read / Write 속도 : 빠름 5. 하드디스크 : 저장 기능 저장 용량 : 큼 Read / Write 속도 : 느림 6. PC를 관리하는 소프트웨어 : 운영체제(OS) OS가 메모리를 관리한다. 우리가 만든 C 프로그램은 운영체제의..
[클래스와 메서드] 모든 객체는 우리가 흔히 알고 있는 자료형 int, double를 통해서만 생성되지 않는다. 클래스라는 설계도를 만들어 객체 타입을 사용자가 직접 정의하여 생성할 수 있다. public class Main { public static void main(String[] args) { // 객체 생성 Person a = new Person(); a.age = 20; a.isMarried = false; a.name = "철수"; a.introduce(); a.age = 21; a.name = "영수"; a.introduce(); } } class Person { int age; boolean isMarried; String name; void introduce() { System.out...
지난번에 이어 함수와 관련된 몇 가지 문제를 더 풀어보자. [문제 1] 입력받은 숫자가 10이라고 할때 1부터 10 사이에 존재하는 모든 소수의 개수와 합을 출력하는 함수를 구현해보자. #include #pragma warning (disable: 4996) int is_prime_number(int num) { if(num < 2) { return 0; } for(int i = 2; i < num; i++) { if(num % i == 0) { return 0; } } return 1; } int get_1_to_n_prime_numbers_count(int n) { int count; for(int i = 1; i 1부터 1000사이에 존재하는 소수의 합 : 76127 number = 2000; co..
[객체] [객체가 필요한 이유] 변수에는 오직 값 하나만 넣을 수 있다. 프로그래밍을 하다보면 변수에 값을 여러개 넣을 필요가 있을 때가 있다. 그래서 고안된 것이 객체이다. 객체는 커피 캐리어에 비유할 수 있다. 커피 캐리어에는 커피를 여러잔 담을 수 있고, 용도에 따라 종류가 여러가지 있다. 프로그래밍을 할 때 상황에 따라 서로 다른 종류의 객체 여러개가 필요하다. 객체를 일종의 제품으로 보았을 때 객체를 만들기 위해서는 설계도 즉, 클래스가 필요하다. 객체는 너무 커서 변수에 담을 수 없다. 클래스로는 객체도 만들 수 있고, 그 객체를 조종할 수 있는 리모콘도 만들 수 있으며 객체 리모콘을 담을 변수도 만들 수 있다. [배열 객체] package org.example; //TIP To Run cod..