목록2024/02 (30)
사이먼's 코딩노트
[캐스팅] Java에서는 형변환을 캐스팅이라고 한다. 여기서 말하는 형변환이란 말그래도 형태를 변환한다는 뜻이다. 예를 들어 정수형 타입인 int와 실수형 타입인 double이 있다면 서로의 타입으로 형태를 변환하는 것이 캐스팅이라고 한다. int i = 10; double d = i; i = (int)d; System.out.println(i); 위 코드를 보면 변수 i는 정수 타입으로 선언되었고 10이라는 값을 넣었다. 변수 d는 실수 타입으로 선언되었고 i가 가지고 있는 10이라는 값을 넣었다. 여기서 먼저 d를 출력문을 통해 출력해보면 10이 아닌 실수 타입에 맞춰 10.0이 출력될 것이다. 이 때 i가 가지고 있는 정수 10은 자동으로 형변환 즉, 캐스팅이 된 것이다. 이번에는 반대로 정수인 1..
[scanf] 출력문을 사용하는 문법을 printf 라고 하면 키보드 입력을 위한 문법은 scanf이다. C언어는 기본적으로 #include 라는 헤더파일을 포함하고 이 때 stdio.h는 표준 입출력을 의미한다. 아래는 scanf의 가장 기본적인 구조이다. #pragma warning(disable: 4996) #include int main() { int input; printf("정수를 입력해주세요. : "); scanf("%d", &input); printf("입력하신 수는 %d 입니다.\n", input); return 0; } 사용자가 키보드로 입력한 정수를 input에 넣어주는 일을 해주는 scanf는 일종의 외부 대행업체라고 생각할 수 있다. scanf는 입력받은 값을 어디에 넣어줄 지 사..
[배열] 아래는 배열의 형태를 코드로 작성한 것이고 포인터와 유사한 점을 찾아봅시다. #include int main(void) { int arr[2000]; int arr1[3] = {1, 2, 3}; int *p = arr1 + 1; printf("%d\n", p[0] + p[1]); return 0; } 위 코드와 같이 배열의 생김새는 [ ] 와 같다. arr이라는 배열 공간에 총 int 타입의 2000개의 변수, 8000 바이트를 관리한다는 뜻이다. arr은 포인터에서의 주소와도 같은 의미로써 한 공간에 메모리 크기가 무조건 8바이트 이다. 포인터에서 * 가 해당 주소로 간다 라는 의미였다면 배열에서는 [ ] 가 그와 같은 의미가 담겨있다. arr1변수와 같이 배열은 항상 배열 중 가장 첫번째 자..
이번에 모작해볼 홈페이지는 올리브영입니다. 모작의 범위는 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 프로그램은 운영체제의..