A storage device, comprising: a buffer configured to receive first data and second data from outside the storage device, and store the first data and the second data on a first page, where a page is the smallest unit for writing data; a non-volatile memory configured to store the first data and the second data in a first block; and a controller configured to perform a program operation that programs the first and second data in free blocks different from each other through a garbage collection, wherein: the first data includes a first stream class number that identifies characteristics of the first data, and the second data includes a second stream class number that identifies characteristics of the second data and is different from the first stream class number, characterized in that: the controller is configured to transmit information of the program operation to the outside of the storage device before performing the program operation, and the controller is configured to perform the program operation when receiving a program execution permission command from the outside of the storage device, wherein the information includes at least one of a number of free blocks, a power required at a time of the program operation, and a number of free blocks generated after the program operation. a buffer configured to receive first data and second data from outside the storage device, and store the first data and the second data on a first page, where a page is the smallest unit for writing data; a non-volatile memory configured to store the first data and the second data in a first block; and a controller configured to perform a program operation that programs the first and second data in free blocks different from each other through a garbage collection, wherein: the first data includes a first stream class number that identifies characteristics of the first data, and the second data includes a second stream class number that identifies characteristics of the second data and is different from the first stream class number, characterized in that: the controller is configured to transmit information of the program operation to the outside of the storage device before performing the program operation, and the controller is configured to perform the program operation when receiving a program execution permission command from the outside of the storage device, wherein the information includes at least one of a number of free blocks, a power required at a time of the program operation, and a number of free blocks generated after the program operation. the first data includes a first stream class number that identifies characteristics of the first data, and the second data includes a second stream class number that identifies characteristics of the second data and is different from the first stream class number, characterized in that: the controller is configured to transmit information of the program operation to the outside of the storage device before performing the program operation, and the controller is configured to perform the program operation when receiving a program execution permission command from the outside of the storage device, wherein the information includes at least one of a number of free blocks, a power required at a time of the program operation, and a number of free blocks generated after the program operation. the controller is configured to transmit information of the program operation to the outside of the storage device before performing the program operation, and the controller is configured to perform the program operation when receiving a program execution permission command from the outside of the storage device, wherein the information includes at least one of a number of free blocks, a power required at a time of the program operation, and a number of free blocks generated after the program operation.