목록전체 글 (45)
Min's dev-log
추상 클래스를 왜 쓰는지 먼저 알아보자. ※ JAVA는 다중 상속을 허용하지 않는다! 공통점을 가지는 자식 클래스들의 부모 클래스가 없는 경우, 이 부모 클래스를 제작하기 위해 탄생한 문법이 추상 클래스이다. 하지만 현재에는 "설계"가 최우선 시 되므로 이런 경우가 없다. 즉, 지금 추상 클래스는 부모 클래스를 제작하기 위해 사용하지는 않는다. ★ 현재는 여러 개의 자식 클래스들을 만들고 싶을 때, 이들의 공통점들을 선 제작하는 용도로 사용한다. : 추상 클래스로는 객체를 만들지 않음 : 왜? 클래스들의 공통점에 관심이 있기 때문! 붕어빵(객체)에는 관심이 없다. : 붕어빵틀(클래스)들의 틀 추상 클래스는 클래스들(자식)이 어떻게 정의되어야 하는지에 관심 있는 것 정의당한 클래스들로부터 객체를 만드는것 ..
문자열 비교 equals() 1) 연산자의 연산 대상은 일반 변수 2) 연산자로 객체(문자열)를 비교할수는 없다. (객체는 일반 변수가 아니기 때문에) 3) ' == ' 비교연산자로는 문자열끼리 비교가 어렵다. => 문자열 객체들은 기본적으로 상대 문자열의 값을 추출하여 비교할 수 있는 메서드를 가지고 있다. => equals() 자주 보게 되는 에러 >> [NullPointerException] 원인 : 메서드 수행 주체인 객체가 NULL인 상황 (아무것도 없는 NULL이 수행할수없다) ex) sc.nextInt(), rand.nextInt(10), car.speedUp(), cat.hello() => sc, rand, car처럼 수행주체인 객체가 있어야하는데 주체가 NULL이되면 안 된다. => eq..

파일이 기본적으로 데이터를 저장하는 단위라고 한다면 디렉토리는 파일을 좀 더 쉽게 관리할 수 있도록 관련되어 있는 파일들을 그룹화 해주는 역할을 한다. 1. 현재 디렉토리와 디렉토리의 변경 getcwd는 현재 어떤 디렉토리에 애플리케이션이 위치하고 있는가를 알고싶을 때 현재 디렉토리를 통해서 현재 디렉토리를 알 수 있고, chdir는 애플리케이션이 명령을 내렸을 때 명령이 영향을 미치는 경로를 변경하고 싶을 때 사용한다. 2. 디렉토리 탐색 scandir은 디렉토리를 탐색하는 기능이다. 첫번째 인자는 탐색할 디렉토리의 경로이고, 두번째 인자는 정렬 방법이다. 두번째 인자로 어떤 값을 주느냐에 따라서 출력되는 파일들의 리스트가 달라진다. 3. 디렉토리 생성 mkdir은 디렉토리를 생성하는 내장함수다. 첫번..

1. 파일 복사와 삭제 1) 복사 2) 삭제 2. 파일 읽고 쓰기 조금 더 고급스러운 파일 제어를 원한다면 fopen함수를 사용해볼 수 있다. 1) 읽기 file_get_contents / fread 텍스트로 이루어진 파일을 읽어서 문자열을 리턴한다. 2) 쓰기 file_put_contents / fwrite 문자열을 파일에 저장한다. 3) 네트워크를 통해 데이터 읽어오기 컴퓨터 바깥쪽에 있는 파일을 읽을수도 있다. 특정 url을 인자로 전달하게 되면 file_get_contents가 url의 페이지 정보를 읽어서 결과를 볼 수 있다. 완전히 똑같지 않게 보이는 이유는 css나 javascript의 경로가 다르기 때문이다. 3. 파일 제어 트러블 슈팅 파일을 읽고 쓸 때 권한의 문제로 오류가 발생할 수 ..

네임스페이스를 알기 전에 파일을 먼저 생각해보자. 파일은 데이터를 저장하기 위한 작은 단위이다. 이는 파일명으로 식별이 된다. 파일의 수가 많아지면서 효과적으로 관리하기 위해 고안된 것이 디렉토리이다. 디렉토리(폴더) == 파일의 공간 파일의 공간을 만들어 놓고 공간에 파일을 고립시키는 걸 통해서 같은 이름의 파일들이 충돌하지 않도록 하는 것 => 디렉토리(폴더)를 사용하는 이유이다. 네임스페이스란 간단하게 디렉토리와 같은 것이라고 생각하자. 하나의 애플리케이션에는 다양한 모듈을 사용한다. 이때 서로 다른 개발자에 의해 만들어지기 때문에 같은 이름을 쓰는 경우가 생길 수 있다. 네임스페이스에서의 네임은 함수, 상수, 클래스 등의 이름을 말한다. 네임스페이스는 같은 이름을 가지고 있는 것들끼리 충돌하는 것..

배열 변수가 하나의 데이터를 임시로 저장하기 위한 것이라면 배열은 여러 개의 데이터를 저장하기 위한 것이라고 할 수 있다. 또한 반복문과 같이 사용했을 때 효율적이다. 반복문으로 배열에 담긴 정보를 하나씩 꺼내서 처리할 수 있기 때문이다. ▼ 예시 배열과 반복문 아래 코드는 반복문을 사용해서 배열 $fruits의 내용을 하나씩 꺼낸 후에 이름의 첫 글자를 대문자로 변경한 후에 출력하고 있다. 배열이란 연관된 정보를 하나의 그룹으로 관리하기 위해서 사용한다. 그 정보를 처리할 때는 주로 반복문을 사용한다. 배열의 크기 count함수로 배열의 크기를 알아낼 수 있다. 배열의 조작 1) 추가 ▷ 배열의 끝에 추가 ▷ 복수 아이템 추가 ▷ 배열의 시작점에 추가 2) 제거 ▷ 첫번째 요소 제거 ▷ 마지막 요소 제..

캐스팅을 살짝 보자면 예를 들어 포켓몬 (최상위 클래스) | 피카츄 | 파이리 | 꼬부기 ... (하위 클래스들) 서로 관련 -> 배열 사용 포켓몬[] data = new 포켓몬[3]; data[0] = new 피카츄(); A=new B(); >> 업캐스팅 서로 다른 타입이어도 업캐스팅을 할 수 있다. ★ 동적바인딩 ★ 업 캐스팅한 객체가 존재한다. 객체.메서드() 할 수 있다. 이때, 오버라이딩한 메서드로 자동 호출 부모 클래스 메소드가 아닌 자식 클래스에서 오버라이딩된 메소드가 실행된다! 실제 객체의 오버라이딩된 메서드가 자동 수행되는 현상이다. => 이를 통해 다형성이 실현된다! 이때, 동적바인딩 == 다형성은 아니다. 다형성은 똑같은 메서드를 수행시켰을 때 주어가 무엇인지에 따라 다른 아웃풋이 나..
상속 부모(상위) 클래스 : 상속을 허용한 클래스(본체) ex) Point 자식(하위) 클래스 : 나중에 정의된 클래스 ex) ColorPoint ★★★★★ 자식 클래스는 객체화할 때에, 가장 먼저 부모 클래스의 기본 생성자를 호출한다. => 모든 자식 클래스의 생성자 첫 줄에는, 부모 클래스의 기본 생성자를 호출하는 코드(super())가 생략 되어있다. super : 부모 클래스 ★ 부모 클래스에게 기본 생성자가 없다면? 자식의 super()가 부모에게 있는지가 중요하다 1) 부모 클래스에게 기본 생성자를 만들어준다 => xxxxx 부모가 100으로 완벽하다고 느꼈을 때 자식을 만든다. 자식을 잘못 만들었다고해서 부모로 다시 돌아간다? >> 설계상 말이 안 된다 2) ★ 부모 클래스의 다른 생성자를 ..